观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.
何时使用观察者模式
(1):对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
(2): 一个对象必须通知其他对象,而他又不需要知道其他对象是什么.
(3): 有两种抽象类型相互依赖,将他们封装在各自的对象中,就可以对他们单独进行改变和复用.
在Cocoa Touch框架中使用观察者模式
1:通知类型:
使用NSNotificationCenter和NSNotification对象实现一对多的交互,允许目标和观察者以一种耦合的方式通信,而两者不需多少了解.
例如模型构造一个通知放到通知中心:
NSNotification *notification = [NSNotification notificationWithName:@“data change”object: self];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter postNotification: notification];
任何要订阅这个通知的对象,首先需要为自己进行注册
[notificationCenter addObserVer : self
selector:@selector(update:)
name:@“data change”
object:subject];
2:键 — 值观察
这一机制基于NSKeyValueObserving非正式协议,Cocoa通过这个协议为所有遵守协议的对象提供了一种自动化的属性观察能力.KVC基于有关非正式协议,通过存取对象属性实现自动观察
/* 注册观察者 */
[_walkeraddObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNewcontext:nil];
/* KVO function 只要object的keyPath属性发生变化,就会调用此函数 */
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/judy_luo/article/details/47156369