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: 方法进行注册:
3.3.接受变更通知
当对象的一个被观察属性发生变动时,观察者收到一个 observeValueForKeyPath:ofObject:change:context:消息。所有观察者都必须 实现这一方法:
3.4.移除观察者
当观察者销毁时,或达到目的无需再使用 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]; |
当对象的一个被观察属性发生变动时,观察者收到一个 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 的分类,意味着可以观察任何对象。 |
当观察者销毁时,或达到目的无需再使用 KVO 时,应该将观察者移除:
1 | [_child removeObserver:selfforKeyPath:@"key"]; |
相关文章推荐
- 安装protocolbuffer详解
- Android——列表视图 ListView(二)SimpleAdapter
- UVa 1339 Ancient Cipher --- 水题
- Android——列表视图 ListView(一)Arrayadapter
- MySQL安装图解设置详细教程
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- linux下gcc默认搜索头文件及库文件的路径
- SiteWhere物联网云平台架构
- springmvc的配置
- Swift学习笔记之基本数据类型-整形,浮点,布尔
- linux制作livecd
- 后台任务(10分钟)
- POJ3254-Corn Fields-状压DP
- mnesia的锁机制
- 2010年清华大学计算机研究生机试真题
- 游戏逻辑底层,MainLoop&&FSM&&MSG(一)
- Http
- 文章标题
- mysql 四中隔离级别
- Android 蓝牙4.0(BLE) 理解--紧随智能家居和可穿戴设备潮流