KVO与KVC

作者: Johnny_Wu | 来源:发表于2021-06-26 14:37 被阅读0次

一、KVO 截屏2021-06-26 下午2.06.12.png

MJPerson有个属性age,这里对age进行KVO监听。

1、未添加KVO监听: 截屏2021-06-26 下午2.07.38.png
2、添加KVO监听后: 截屏2021-06-26 下午2.09.23.png
可见,进行KVO监听后,会动态生成MJPerson的一个子类。生成子类的目的是为了可以重写setAge方法:
截屏2021-06-26 下午2.11.32.png

二、KVC

1、特性
person->_age = 10。直接赋值成员变量是不会触发kvo的,因为没调用setting方法
但通过kvc设置成员变量是会触发kvo的,内部会主动掉你用willChangeValueForKey
didChangeValueForKey这两个方法。

oc定义了kvo特性,那么所有的kvc都得触发kvo,这才符合设计原理。可以认为kvo就是为kvc服务的。

2、setValueForKey的原理: 截屏2021-06-26 下午2.33.06.png

先去找方法,再去找成员变量。

3、valueForKey的原理: 截屏2021-06-26 下午2.35.42.png

也是一样,先找方法,再找成员变量。

相关文章

网友评论

      本文标题:KVO与KVC

      本文链接:https://www.haomeiwen.com/subject/nhlzyltx.html