cocoa 之 KVO
来源:互联网 发布:windows 远程桌面 打开 编辑:程序博客网 时间:2024/04/30 22:35
Key-Value Observing (简写为KVO):当指定的对象的属性被修改了,允许对象接受到通知的机制。每次指定的被观察对象的属性被修改的时候,KVO都会自动的去通知相应的观察者。
KVO优点:
1) 每次属性改变了就发送消息通知 。KVO对资源消耗比较底。(有改变就通知观察者)
2) KVO非常的强大,可以很容易的支持多个观察者观察同一个属性,以及相关的值
KVO使用:
1)首先,构思一下如下实现KVO是否有必要。比如,一个对象,当另一个对象的特定属性改变的时候,需要被通知到。
2)被观察对象的值(属性)加入“addObserver:forKeyPath:options:context:”观察。(当一个对象的特定属性改变的时候,需要被通知到另一个对象)
[self.tableViewaddObserver:self forKeyPath:@"contentOffset"options:NSKeyValueObservingOptionNewcontext:nil];当tableView的contentOffset属性发生变化时self会得到通知(即 observeValueForKeyPath:ofObject: change: context:方法会被调用)
3) 实现回调。
监听属性值发生改变时 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 会被调用,在方法里我们可以做出应对的变化。
4)移除观察
当我们不在需要观察变化时,应当移除所观察。
即对应的 [self.tableViewremoveObserver:selfforKeyPath:@"contentOffset"];
其实在KVO里已经有对KVC的应用,forKeyPath:@"contentOffset",应该就是对KVC的应用。
对比Notification 和 KVO
相同
Notification 和 KVO都是用于协助对象间的通信:某个对象监听某个事件的发生,当某个事件发生时,该对象会得到通知然后做出响应;
相异
Notification 中监听者向一个单例对象NSNotificationCenter注册,NSNotificationCenter类似一个广播中心,接受任何对象的注册且不一定指望有谁对此消息关心,(可以一对多);KVC则向要监听的对象注册,监听者必须知道发送者(值将发生改变的那个对象) 一对一。
NSNotification模式里监听的对象与被监听的对象通信是通过 NSNotificationCenter 这个中介,而KVO 里,不能说两者是直接通信的,我没有了解过过 KVO 是如何实现通信的,从表面上看两者就那么心灵感应一般(很高大上),这是系统替我们实现的;
示例一
示例二(来自《iOS7编程实战》)
- cocoa 之 KVO
- cocoa的KVO以及loadNib
- Cocoa中KVO的简单用法
- cocoa 自动键值观察(KVO)--笔录
- [Cocoa]深入浅出 Cocoa 之消息
- [Cocoa]深入浅出 Cocoa 之 Framework
- [Cocoa]深入浅出 Cocoa 之 Plugin
- [Cocoa]深入浅出 Cocoa 之 Framework
- [Cocoa]深入浅出 Cocoa 之消息
- [Cocoa]深入浅出 Cocoa 之消息
- [Cocoa]深入浅出Cocoa之消息
- [Cocoa]深入浅出Cocoa之消息
- [Cocoa]深入浅出 Cocoa 之消息
- [Cocoa]深入浅出Cocoa之消息
- [Cocoa]深入浅出Cocoa之消息
- [Cocoa]深入浅出 Cocoa 之消息
- [Cocoa]深入浅出 Cocoa 之消息
- [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
- 关系型数据库管理系统简介
- 实例8:状态栏中显示代表登陆状态的图标(实现仿QQ登陆状态显示)
- NDK :Native method not found
- textview加链接
- 类目与扩展
- cocoa 之 KVO
- nginx安装
- 将opencv2.4.9移植到ZYNQ开发板上(ZC702)
- 【d3.js教程10】气泡图bubble chart
- [Ubuntu]Ubuntu登录界面反复输入密码
- Activity的生命周期
- 多线程
- Back Stack与Activity
- 算法学习资源(不断更新)