您的位置:首页 > 其它

KVO

2016-04-06 01:00 295 查看
KVO
3.1.基本概念
3.1.1.Key Value Observing,直译为:基于键值的观察者。它提供一种机制,当 指定的对象的属性被修改后,则对象就会接受到通知。简单的说就是每次指定的被 观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。
3.1.2.与 NSNotification不同,键-值观察中并没有所谓的中心对象来为所有观察者 提供变化通知。取而代之地,当有变化发生时,通知被直接发送至处于观察状态的 对象。NSObject提供这种基础的键-值观察实现方法。
3.1.3.你可以观察任意对象属性,包括简单属性,对一或是对多关系。对多关系的观 察者将会被告知发生变化的类型-也就是任意发生变化的对象。
3.1.4.键-值观察为所有对象提供自动观察兼容性。你可以通过禁用自动观察通知并实现手动通知来筛选通知。
3.1.5.不能观察已经被释放的对象,如果要观察,需要是强应用对象,或者被其他对象强应用的对象。
3.2.注册观察者
为了正确接收属性的变更通知,被观察者必须首先调用 addObserver:forKeyPath:options:context: 方法进行注册:
1
2
3
4
5
6
7
8
9
10
11
/* anObserver :监听器对象
* keyPath :监听的属性
* options :决定了当属性改变时,要传递什么数据给监听器
*/
-(void)addObserver:(NSObject*)anObserver forKeyPath:(NSString*)keyPath
options:(NSKeyValueObservingOptions)options context:(void*)context

/* 使用NSKeyValueObservingOptionOld选项,可以将改变之前的值传递给观察者。(以变更字典中的一个项的形式)
* 指定 NSKeyValueObservingOptionNew选项,可以将改变的新值传递给观察者。
* 可以使用逐位“|”这两个常量,来指定同时传递上述两种类型的值。
*/
[_child addObserver:selfforKeyPath:@"tired"options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNewcontext:nil];
3.3.接受变更通知
当对象的一个被观察属性发生变动时,观察者收到一个 observeValueForKeyPath:ofObject:change:context:消息。所有观察者都必须 实现这一方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* keyPath : 键路径
* object : 被观察者
* change : 包含变更细节的字典
* context : 注册观察者时提交的上下文指针,可以为任意类型的参数
*/
- (void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)c{
if([keyPath isEqual:@"key"]) {
NSLog(@"");
}
}
// observeValueForKeyPath 方法是 NSObject 的分类,意味着可以观察任何对象。
3.4.移除观察者
当观察者销毁时,或达到目的无需再使用 KVO 时,应该将观察者移除:
1
[_child removeObserver:selfforKeyPath:@"key"];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: