objective-C NSNotificationCenter (通知)的使用方法


iPhone開發之NSNotificationCenter(通知)的使用方法

 NSNotificationCenter 是 Cococa消息中心,統一管理單進程內不同線程的消息通迅,其職責只有兩個:

1,提供“觀查者們”對感興趣消息的監聽注冊;


  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(printName:) name: @"messageName" object:nil];  
 

 a, defaultCenter,消息中心只有一個,通過類方法獲取它的單例。

 b, addObserver,添加監聽者實例,此處為當前實例

 c, selector,observer中的一個方法指針,當有消息的時候會執行此方法,並把相關上下文以參數傳遞過去

 d, name,注冊所關心消息的名稱,

 e, object,這個是對消息發送方的一個過濾,此參數據說明當前監聽器僅對某個對象發出的消息感興趣。

 

 整體意思:

 向消息中心中注冊一個“監聽者”(當前實例self, 相當於Java里的this)。當有名為NSWindowDidBecomeMainNotification 的消息發送到消息中心時,執行本實例的aWindowBecameMain方法。

 

 2,接收“消息”,並把消息發送給關心它的“觀查者們”

 

 消息的推送:

代碼 
  1. [[NSNotificationCenter defaultCenter] postNotificationName:@"messageName" object:nil userInfo: [NSDictionary dictionaryWithObject:@"jory" forKey:@"name"|^Archive.zip]];  
 

 a, postNotificationName,推送消息的名稱,匹配在注冊消息監聽者時的消息名稱。

 b, object, 發送消息的實例

 c, userInfo,發送消息時附帶的消息上下文,此實例為一個字典實例(相當於Java里的HashMap)。

 

 3,當有消息推送到消息中心后,會把此消息發送給相關的“監聽者”,並會執行消息注冊時的方法:

C代碼    收藏代碼
  1. -(void)printName:(id)sender{  
  2. NSString *name = [[sender userInfo] objectForKey:@"name"];  
  3. NSLog(@"name: %@",name);  
  4. }  
 

 方法很簡單,從消息上下文中(發送消息時的 userInfo),獲取"name"並打印。 

 

iPhone軟件開發的時候會遇到這種情況:打開APP后會在后台運行某個方法,例如下載文件,下載完成后可能需要調用某個方法來刷新界面,這時候可能沒法在下載的函數中回調。(通知)NSNotificationCenter是一個很好的選擇。

通知使用起來灰常的簡單:

1、定義通知:

[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(callback)
name: @"back"
object: nil];

2、定義通知中使用的方法:

- (void)callback{
NSLog(@"i am back.");
}

3、調用通知:

- (void)getIT{
NSLog(@"get it.");
//發出通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"back" object:self];
}

在調用通知的時候程序會在整個項目中尋找此通知的名稱,找到后發出請求,因此通知的名稱需要在整個項目中唯一。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM