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" ];

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

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

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

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

- (void)setAge:(int)age

{

[super setAge:age];

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值