KVO面试题
什么是KVO?
kvo是key-value observing的缩写,是oc对观察者设计模式的又一实现
Apple使用isa混写(isa-swizzing)来实现KVO。
KVO原理
addObserve forKeyPath的时候调用系统观察者观察A类的成员变量
运行时动态创建原来类的子类NSKVONotifying_A,把A的isa指针指向NSKVONotifying_A(这就是isa混写技术)
重写setter方法负责通知所有观察对象。
可以断点调试出来
重写的setter方法里面调用了willChangeValueForKey和didChangeValueForKey
didChangeValueForKey触发kvo回调
setter方法改变值可以生效。
通过kvc方法修改value能否让kvo生效?
可以生效,setValue forKey会调用对象的setter方法。
通过成员变量直接赋值value能否让kvo生效?
成员变量直接修改需要手动添加kvo才会生效
(手动kvo下图)