KVO

  • KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。


    KVO.png
  • 未使用KVO监听的对象,instance对象的isa指针会指向class对象,class对象中包括对象方法setAge:和 age。


    未使用KVO监听的对象.png
  • 使用了KVO监听的对象
    1、instance对象的isa指针会指向一个由Runtime动态创建的继承自class对象的子类(NSKVONotifying_cls),NSKVONotifying_cls类对象会重写父类class对象的set方法、class方法、dealloc方法、_isKVOA方法的实现
    2、当修改instance对象的属性时,set方法内部会调用Foundation的_NSSet**ValueAndNotify函数,函数内部会调用willChangeValueForKey:父类原来的setter实现didChangeValueForKey:
    3、didChangeValueForKey:内部会调用observer的observeValueForKeyPath:ofObject:change:context:方法
使用了KVO监听的对象.png

_NSSet*ValueAndNotify的内部实现.png
  • 手动调用willChangeValueForKey和didChangeValueForKey可以手动触发KVO。
  • 直接修改成员变量不会触发KVO
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO ? 首先需要了解KVO...
    hjltony阅读 589评论 0 2
  • 1、KVO的定义KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值...
    IIronMan阅读 593评论 0 2
  • 面试问题: · iOS用什么方式实现对一个对象的KVO? · 如何手动触发KVO? 我们通过以下几个点来寻找这两个...
    高思阳阅读 252评论 0 1
  • iOS底层原理总结--OC对象的本质(一) - 掘金 iOS底层原理总结--OC对象的本质(二) - 掘金 iOS...
    小李小李一路有你阅读 837评论 0 8
  • KVO: KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变...
    曹来东阅读 650评论 0 0