码迷,mamicode.com
首页 > 其他好文 > 详细

KVO的内部实现原理

时间:2015-04-03 19:10:41      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

Key-Value Observing (KVO)

首先我们先了解下 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"];

}

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

技术分享

技术分享

技术分享

 

 

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

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

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

- (void)setAge:(int)age

{

  [super setAge:age];

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

}

 

 

 

 

 

KVO的内部实现原理

标签:

原文地址:http://www.cnblogs.com/xqios/p/4390707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!