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

 

 

posted @ 2020-04-15 14:39  Justin_mr  阅读(259)  评论(0编辑  收藏  举报