KVO

2019-11-27  本文已影响0人  _Kai_1959

简介

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:

上一篇下一篇

猜你喜欢

热点阅读