觀察者模式:
定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新.
何時使用觀察者模式
(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:@ageoptions:NSKeyValueObservingOptionNewcontext:nil];
/* KVO function 只要object的keyPath屬性發生變化,就會調用此函數 */
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context