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下图)

原文地址:https://www.cnblogs.com/WellLin/p/12705177.html