KVO
KVO的本质
KVO— key-value Observing 键值监听,可以用于监听某个对象属性的改变
isa NSKVONotifying_Class 是 Class 的一个子类
Runtime动态创建一个类
int key
xx = int
double key
xx = double
重写 set方法 内部调用 Foundation _NSSetxxValueAndNotify()
还会重写
重写 -(CLass)class, 返回 的是 Class 而不是 NSKVONotifying_Class
-(void)dealloc,
-(BOOL)_isKOVA
_NSSetIntValueAndNotify() 相当于
[self willChangeValueForKey:@”key”]
[super setKey:key];
[self didChangeValueForKey:@”key”]
didChangeValueForKey 方法内部会通知监听器
observe observeValueForKeyPath: ofObject: change: content:
利用RuntimeAPI动态生成一个子类, 并且让 实例对象的 isa 指向这个全新的子类
当修改 实例对象的属性时,会调用 Foundation 的 _NSSetXXValueAndNotify() 函数
willChangeValueForKey:
父类原来的setter
didChangeValueForKey
内部会出发监听器(Oberser)的监听方法(observe observeValueForKeyPath: ofObject: change: content:)
如何手动触发KVO
调用
willChangeValueForKey:
didChangeValueForKey: