iOS ---- KVO的内部实现原理

Key-Value Observing (KVO)

KVO:当指定的对象的属性被修改了,允许对象接收到通知的机制。

[persion addObserver : self forKeyPath : @"age" options : NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context : nil ];

只要当前类中 age 这个属性发生的变化都会触发到以下的方法

  • (void)observeValueForKeyPath:(NSString *)keyPath

ofObject:(id)object

change:(NSDictionary *)change

context:(void *)context

同时不要忘记在 dealloc中移除监听

-( void )dealloc{

[ self . persion removeObserver : self forKeyPath : @"age" ];

}

下面就来看看它的实现原理

QQ20160723-0.png
QQ20160723-1.png

通过上面图片可以看出 当某个类第一次被监听时,系统会在运行时期动态地创建一个继承XqPersion的NSKVONOtifying_XqPersion类

在这个派生类中,重写基类中任何被观察属性的setter方法,在setter方法中实现真正的通知机制.

在该类中重写了监听属性的set方法,来通知监听器

  • (void)setAge:(int)age

{

[super setAge:age];

[坚听器 observeValueForKeyPath:@"age" ofObject:self change:@{} context:nil];

}

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

推荐阅读更多精彩内容