IOS 訊息機制(NSNotificationCenter)

來源:互聯網
上載者:User

訊息機制 NSNotificationCenter 一直都在頻繁使用,但是卻對其原理不是十分瞭解。今天就花些時間,把訊息機制原理重頭到尾好好過一遍。iOS 提供了一種 "同步的" 訊息通知機制,觀察者只要向訊息中心註冊, 即可接受其他對象發送來的訊息,訊息寄件者和訊息接受者兩者可以互相一無所知,完全解耦。這種訊息通知機制可以應用於任意時間和任何對象,觀察者可以有多個,所以訊息具有廣播的性質,只是需要注意的是,觀察者向訊息中心註冊以後,在不需要接受訊息時需要向訊息中心登出,這種訊息廣播機制是典型的“Observer”模式。這個要求其實也很容易實現. 每個運行中的application都有一個NSNotificationCenter的成員變數,它的功能就類似公用欄. 對象註冊關注某個確定的notification(如果有人撿到一隻小狗,就去告訴我). 我們把這些註冊對象叫做 observer. 其它的一些對象會給center發送notifications(我撿到了一隻小狗). center將該notifications轉寄給所有註冊對該notification感興趣的對象. 我們把這些發送notification的對象叫做 poster訊息機制常常用於在向伺服器端請求資料或者提交資料的情境,在和伺服器端成功互動後,需要處理伺服器端返回的資料,或發送響應訊息等,就需要用到訊息機制。 本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,部落格園,請搜尋:部落格園 - 尋自己,查看原版文章
本文首發地址:IOS 訊息機制(NSNotificationCenter) - http://www.cnblogs.com/xunziji/p/3257447.html使用訊息機制的步驟:

1. 觀察者註冊訊息通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getUserProfileSuccess:) name: :nil];

notificationObserver 觀察者 : self
notificationSelector 處理訊息的方法名: getUserProfileSuccess
notificationName 訊息通知的名字: Notification_GetUserProfileSuccess
notificationSender 訊息寄件者 : 表示接收哪個寄件者的通知,如果第四個參數為nil,接收所有寄件者的通知

 

2. 發送訊息通知

//UserProfile Is A Model
//@interface UserProfile : NSObject

[[NSNotificationCenter defaultCenter] postNotificationName: :userProfile userInfo:nil];

notificationSender 訊息寄件者: userProfile

 

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,部落格園,請搜尋:部落格園 - 尋自己,查看原版文章
本文首發地址:IOS 訊息機制(NSNotificationCenter) - http://www.cnblogs.com/xunziji/p/3257447.html

3. 觀察者處理訊息 

- () getUserProfileSuccess: (NSNotification*= [aNotification =======

 

NSNotification 接受到的訊息資訊,主要含:
Name: 訊息名稱 Notification_GetUserProfileSuccess
object: 訊息寄件者 userProfile
userInfo: 訊息傳遞的資料資訊

 

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,部落格園,請搜尋:部落格園 - 尋自己,查看原版文章
本文首發地址:IOS 訊息機制(NSNotificationCenter) - http://www.cnblogs.com/xunziji/p/3257447.html

4. 觀察者登出,移除訊息觀察者

雖然在 IOS 用上 ARC 後,不顯示移除 NSNotification Observer 也不會出錯,但是這是一個很不好的習慣,不利於效能和記憶體。

登出觀察者有2個方法:

a. 最優的方法,在 UIViewController.m 中:

-(

 If you see the method you don't need to call [super dealloc]; here, only the method without super dealloc needed.

 

b. 單個移除:

[[NSNotificationCenter defaultCenter] removeObserver:self name: :nil];

本文禁止任何網站轉載,嚴厲譴責那些蛀蟲們。
本文首發於,部落格園,請搜尋:部落格園 - 尋自己,查看原版文章
本文首發地址:IOS 訊息機制(NSNotificationCenter) - http://www.cnblogs.com/xunziji/p/3257447.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.