kvc、kvo

作者: 奋斗的蝼蚁 | 来源:发表于2020-11-28 16:05 被阅读0次

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

相关文章

网友评论

      本文标题:kvc、kvo

      本文链接:https://www.haomeiwen.com/subject/wggqwktx.html