通知的深度理解

iOS开发中的通知,代理,block是子对象在父对象进行回调的三种基本方法,而通知在多对象,跨层次的应用方面,拥有绝对的优势.

666.gif

实际项目中需要父类对象(view),在不同的时刻,对子对象(redView)进行通知的添加与移除.那接收到通知时的响应方法,是写在父对象(view)还是子对象(redView)中呢?

- (void)viewDidLoad {
    [super viewDidLoad];
    ZDRedView *redView = [[ZDRedView alloc] initWithFrame:CGRectMake(10, 100, 300, 200)];
    self.redV = redView;
    [self.view addSubview:redView];
    [[NSNotificationCenter defaultCenter] addObserver:redView selector:@selector(changeLabel) name:ChangeNotify object:nil];
}

- (void)changeLabel{
    //处理通知
}

上面是我们通常的处理方式,但是在实际测试中,却需要将通知的响应方法changeLabel放在redVeiw中,才能被调用.如下所示:

//redView中的代码
- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor redColor];
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(frame.origin.x, frame.origin.y + 10, frame.size.width - 20, 50)];
        self.label = label;
        label.textAlignment = NSTextAlignmentCenter;
        [self addSubview:label];
        label.text = @"刚开始";
    }
    return self;
}

- (void)changeLabel{
    self.label.text = @"改变了";
    self.label.backgroundColor = [UIColor greenColor];
}

下面是Demo地址:
https://github.com/zhudong10/SpecialNotify.git

您的点赞或关注都是对我的支持与鼓励~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 1.xcode5和xcode7区别 1.xcode7没有Frameworks文件夹,xcode7内部会自动帮你导入...
    彼岸的黑色曼陀罗阅读 526评论 0 2
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,187评论 6 13
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,815评论 1 92
  • ——作者 舞动人生 一转眼 成了妈妈的摄影师 对美的感觉 如此精准 你蹲下的那一刻 很是专业 才发现宝贝真正长大了...
    创造全新幸福生活阅读 227评论 0 0