问题:
- iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?)
- 利用RuntimeAPI动态生成一个子类,类名为NSKVONotifying_原来的类名,并且让instance对象的isa指向这个全新的子类
- 该子类的superclas指针指向原来的类对象
- 重写了class方法,会返回原来类的class对象
- 重写了delloc方法
- 重写类set方法,该方法会调用Foundation的_NSSetXXXValueAndNotify函数
- _NSSetXXXValueAndNotify中会调用
willChangeValueForKey:
- 原来类对象的set方法
didChangeValueForKey:
,该方法内会触发监听器(Oberser)的监听方法(observeValueForKeyPath:ofObject:change:context:
)
- 如何手动触发KVO?
- 手动调用
willChangeValueForKey:
和didChangeValueForKey:
一起调用即可,不可少
- 直接修改成员变量会触发KVO么?
- 不会,比如
_name=@"123"
并不会触发set方法,所以不会触发kvo