kvc、kvo

KVO

观察者模式,使用了isa 混写来实现kvo。

观察对象A,将A的isa指针指向A的子类,NSKVONotifying_A,重写setter 方法
重写setter 方法负责通知所有观察对象

//NSKVONotifying_A 的setter 实现
 - (void)setValue:(id)obj
 {
     [self willChangeValueForKey:@"keyPath"];
     //调用父类实现,也即原类的实现
     [super setValue:obj];
     [self didChangeValueForKey:@"keyPath"];
 }

其中  [super setValue:obj]; 这句解决了你对子类发送消息,为啥父类的值也会更新的原因。

对成员变量赋值,不会触发KVO, 因为不会触发setter 方法。
需要手动设置 willChangeValueForKey: 方法和 didChangeValueForKey: 方法

KVC

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容