KVO的本质:
本质是重写set方法。
1、利用Runtime API 动态生成一个全新的子类,并且让instance对象的isa指向这个全新的子类;
2、当修改instance对象的属性时,会调用Foundation的_NSSetXXXValueAndNotify
函数;
函数内部实现:
- willChangeValueForKey:
- 父类原来的setter
- didChangeValueForKey:
didChangeValueForKey:
- 内部会触发监听器(Oberser)的监听方法(
observeValueForKeyPath:ofObject:change:context:
)
扩展:
如何手动触发KVO
- 手动调用
willChangeValueForKey:
和didChangeValueForKey: