1.kvo键值监听 当属性改变时监听属性值的变化
添加监听方法 addObserver:(nonnull NSObject *) forKeyPath:(nonnull NSString *) options:(NSKeyValueObservingOptions) context:(nullable void *)
获取值方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
2.kvo 添加监听方法时,
(1)会利用runtime动态生成一个类NSKVONotifying_xxxx 继承 xxxx,并且让instance的isa指针指向全新的子类、重写-(void)setXxx{}方法,
(2)当修改instance对象属性时,会调用 -(void)setXxx{}里面的NSSetxxxValueAndNotify();的函数 ,NSSetxxxValueAndNotify()函数是Foundation的
(3)NSSetxxxValueAndNotify()函数,执行了下面的方法 ,
willChangeValueForKey:
[super setAge:age];
didChangeValueForKey:
下面看代码证明动态生成NSKVONotifying_xxxx类 继承 xxxx
证明1:
证明2:
证明3:
3 . NSKVONotifying_xxxx类看一下里面实现了哪些方法
4.证明 willChangeValueForKey: ; didChangeValueForKey:被调用了