设为首页 加入收藏

TOP

深入剖析通知中心和KVO(二)
2017-10-13 10:33:07 】 浏览:2063
Tags:深入 剖析 通知 中心 KVO
utomatic = YES; if ([key isEqualToString:@"age"]) { automatic = NO; } else { automatic = [super automaticallyNotifiesObserversForKey:key]; } return automatic; } //重写setter方法手动设置KVO - (void)setAge:(int)age { //手动设置KVO if (_age != age) { [self willChangeva lueForKey:@"age"]; _age = age; [self didChangeva lueForKey:@"age"]; } }

注意:一般的建议是,在获取属性值时,可以用实例变量,在设置属性值时,尽量用setter方法,以保证属性的KVO特性。

  • KVO的实现原理

    • 当某一个类的实例第一次使用KVO的时候,系统就会在运行期间动态的创建该类的一个派生类,该类的命名规则一般是以NSKVONotifying为前缀,以原本的类名为后缀。并且将原型的对象的isa指针指向该派生类。同时在派生类中重载了使用KVO的属性的setter方法,在重载的setter方法中实现真正的通知机制,正如前面我们手动实现KVO一样。这么做是基于设置属性会调用 setter 方法,而通过重写就获得了 KVO 需要的通知机制。当然前提是要通过遵循 KVO 的属性设置方式来变更属性值,如果仅是直接修改属性对应的成员变量,是无法实现 KVO 的。
  • 代码-大家可以去我的github去下载

    KVO-Demo网址

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇OC NSFileManager(文件路径操作) 下一篇swift 2.2 语法 (中)

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目