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];
}
时间: 2024-08-07 16:59:10