轉自 : http://mfvan.blog.163.com/blog/static/58895190201132024136497/
2011-04-21 15:39:34| 分類: IOS/OBJ-C|字型大小 訂閱
Cocoa 的NSNotification類的執行個體封裝了要廣播的訊息,有興趣接收資訊的對象將利用Cocoa 的NSNotificationCenter類的執行個體註冊它們自己。註冊的對象稱為觀察者。
當將一條通知發送到通知中樞時,通知中樞會把該通知分發給合適的觀察者。單個通知可能被廣播給任意數量的觀察者,把訊息發送到通知中樞的對象不需要知道有哪些觀察者存在,或者有多少個觀者者最終會接收到通知。類似的,觀察者不一定需要知道通知來源於何處。當匿名對象需要被動地觀察和反應重要事件時,可以使用通知模式。與之相反,當匿名對象需要主動地影響所發生的事件時,可以使用委託模式。
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName
object:(id)anObject;
第一個參數是要註冊的觀察者。第二個參數是一個選取器,用於確定在發布合適的通知時要發送給觀察者的objective-c訊息,選取器必須指定一個接收參數的方法,並且該參數必須是一個指向通知執行個體的指標。第三個和第四個參數aName:和 anObject:確定了觀察者有興趣接收哪些通知。
只有其名稱與指定名稱匹配的通知才會被傳送給註冊的觀察者。
同步通知和非同步通知
發布通知給NSNotificationCenter是同步的,這意味著當利用- (void)postNotification:(NSNotification*)notification;或者任何相關的NSNotificationCenter方法發布通知時,在postNotification:返回對你的代碼控制之前將把通知傳送給所有合適的註冊觀察者。同步行為也意味著在你實現方法對通知做出反應時,應該留意後果。如果在通知處理代碼中執行過長的操作,就會延遲其他對象對通知的接收,以及延遲返回到發布通知的代碼。
一種用於啟動複雜的處理以響應通知的常見技巧是使用順延強制。在通知處理代碼中,預定將來的訊息並立即返回。
當你需要比僅僅延遲訊息更複雜的非同步行為時,可以使用Cocoa的NSNotificationQueue類。NSNotificationQueue
執行個體實現了一個非同步先進先出的隊列。
在調用
– enqueueNotification:postingStyle:coalesceMask:forModes:
時,將把指定的通知放在隊列尾部,並把控制返回給調用者。基於postingStyle,coalesceMask and modes的值,在以後某個時間NSNotificationQueue把通知發布給NSNotificationCenter,從那一刻起,由NSNotificationCenter同步地處理通知。