KVO

简介

KVO全称KeyValueObserving,俗称键值监听,是苹果提供的一种事件通知机制,用于监听对象属性改变。

使用

1. 通过addObserver:forKeyPath:options:context:方法注册观察者

2. 实现observeValueForKeyPath:ofObject:change:context:方法,当属性发生改变时,会回调这个方法

3. 调用removeObserver:forKeyPath:方法移除KVO,add和remove成对出现

原理

1. 对象添加KVO监听后,会利用RuntimeAPI动态生成一个子类,并让对象的isa指针指向这个全新的子类,该子类重写了set、class、dealloc方法,新增_isKVOA方法,其中set方法的IMP指针指向Foundation框架的_NSSetObjectValueAndNotify函数

2. 当修改对象的属性时,系统会先后调用子类的set方法——Foundation框架的_NSSetObjectValueAndNotify函数,willChangeValueForKey方法,父类的set方法,didChangeValueForKey方法,最后会触发监听器(Observer)的监听方法observeValueForKeyPath:ofObject:change:context:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • KVO编程指南 Key-Value Observing Programming Guide 1 Introduct...
    codeTao阅读 3,762评论 0 0
  • 上半年有段时间做了一个项目,项目中聊天界面用到了音频播放,涉及到进度条,当时做android时候处理的不太好,由于...
    DaZenD阅读 8,114评论 0 26
  • 问题 iOS用什么方式实现对一个对象的KVO?(KVO的本质是什么?) 如何手动触发KVO ? 首先需要了解KVO...
    hjltony阅读 3,633评论 0 2
  • 什么是KVO? KVO 全称 Key Value Observing,是苹果提供的一套事件通知机制。允许对象监听另...
    祀梦_阅读 3,325评论 0 4
  • 天空翱翔的云鹰 飘飘荡荡 海面回旋的海鸥 悠哉悠哉 屋顶来回的白鸽 忙忙碌碌 地面刨土的小鸡 叽叽喳喳
    倚诗爱世阅读 1,716评论 1 3