NSNotification註冊observer和poster

 

 這是一個觀察者模式。
首先在你需要監聽的類中加入觀察者:
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
這個觀察者在監聽到anObject發送名字爲aName的notification時,調用selector的方法,在aSelector方法中得到userInfo。
anObject表示從誰那兒發送出來的消息。
一般的selector中的方法可以這麼寫:
- (void)method: (NSNotification:)sender
{
    NSDictionary *dict = [sender userInfo];
}
也就是說監聽到了anObject發出消息,消息的名字是aName,此時observer就調用aSelector方法,把notification的userInfo拷貝到本地。

然後在被監聽的類中發送通知:
可以使用一下三個方法:
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName object:(id)anObject;
- (void)postNotificationName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;
anObject表示誰發送了這個消息。
第一個方法直接把定義好的notification發出,notification的初始化方法如下:
+ (id)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)userInfo 
第二個方法只定義了消息名和發消息者,沒有傳遞實際的參數,貌似也可以把anObject自身作爲消息傳遞出去,這個還沒有搞懂。差不多就是作爲observer可以回調poster。
第三個方法指定消息名稱,發消息者,並且傳遞了userInfo。也就相當於初始化了一個notification,並且用第一個方法發出。

如果object:nil表示以廣播方式發消息或者得到消息,這個時候只要消息名字是對的就可以得到這個消息。
object:用來表示 誰發送的消息,或者從誰得到消息。
參數應該在userInfo裏面傳遞。
NSNotification的作用是在同一程序的不同類中傳遞參數,傳遞的方法是把參數放在NSDictionary類型的userInfo中。

NSNotificationCenter的作用:我的理解就是一箇中轉站,每個對象都有自己的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章