訊息機制 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