OC语法|OC语法 KVO

  • Key-Value-Observe 键指针监听
用于监听某个属性值的改变。是基于KVC(Key-Value-Coding 键值编码)实现的.
  • 实现原理
在为实例对象添加观察者后,系统内部会新建一个名为 NSKVONotifying_类名 的类继承原实例对象的父类,并将原实例对象的isa指针指向 NSKVONotifying_类名 类,并为NSKVONotifying_类名 添加以下方法
1.set[属性名]:方法, 在原实例对象调用set[属性名]:方法时,会通过isa指针,寻找到NSKVONotifying_类名set[属性名]:方法并调用。
2.class:方法 在实例对象调用时返回原实例对象的类名,欺骗。
3.delloc:方法 在移除监听做处理。
4._isKVOA:方法 判断是不是KVO。的类
  • set[属性名]:方法
在原实例对象调用set[属性名]:方法时,会通过isa指针,寻找到NSKVONotifying_类名set[属性名]:方法并调用。NSKVONotifying_类名set[属性名]:方法内部会调用_NSSet[值得类型]ValueAndNotify方法,

OC语法|OC语法 KVO
文章图片
_NSSet[值得类型]ValueAndNotify`方法 值
_NSSet[值得类型]ValueAndNotify方法 的内部实现
[self willChangeValueForKey:@""]; //原来的setter的实现 [self didChangeValueForKey:@""];

didChangeValueForKey:内部会调用obeseverValueForKeyPath:ofObject:change:context:方法 通知外部调用完成
【OC语法|OC语法 KVO】可以得知,KVO依赖于set[属性名]:方法 ,set[属性名]:方法 又依赖于 KVC

    推荐阅读