key value observer 键值观察
一、使用方法:
以person对象为例,person中的属性name,监听name值改变的方法
//添加监听的属性keyPath options:要监听的是新值还是旧值
[self.person
addObserver:self
forKeyPath:@"name"
options:NSKeyValueObservingOptionNew |
NSKeyValueObservingOptionOld
context:nil];
//监听方法的实现
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary
*)change context:(void *)context {
//keyPath:被监听的属性名
//ofObject:被监听的对象
//change:被监听属性的值包括新值和旧值
}
二、注意事项
1、KVO 是同步执行的,一旦对象的属性值发生变化,KVO的方法就会被调用,并且是在值改变线程中被调用,
在多个线程中同时修改一个观察者属性的时候,KVO监听方法中会存在资源抢夺的问题,改善方法是使用互斥锁
KVO中一般不涉及复杂的逻辑处理,只是做简单的观察
2、通知也可以认为是KVO,使用方法很类似,通知在对象销毁的时候需要删除通知,同样KVO在对象销毁的时候也需要删除观察者
- (void)dealloc {
[self.person
removeObserver:self
forKeyPath:@"name"];
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-13 16:19:16