設計模式—通知

來源:互聯網
上載者:User

轉自 : 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同步地處理通知。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.