1. 程式人生 > >iOS 通知中心 NSNotificationCenter(訊息機制)

iOS 通知中心 NSNotificationCenter(訊息機制)

今天專案要用到NSNotificationCenter,我喜歡叫它訊息(有的地方叫通知)。前兩天有弄過訊息推送,所以想對不瞭解的人解釋一下,ios訊息推送與這個訊息不是一回事!(我感覺他倆名字有的相似,怕有人誤會)

因為本人菜鳥一枚,所以之前弄過一次這個。但是今天要用的時候發現什麼都忘了,所以上網去找(我之前學習的時候看過一個有demo的文章),但是網上講的都是我不瞭解的名詞(觀察者。。就是接受訊息的)。。。。

不過還好最後找到了,在此個大家分享一下:http://blog.csdn.net/crayondeng/article/details/9372079

我的這個demo就是從他那裡弄來的(就是我自己敲了一邊)。。

1)NSNotification :用於建立傳遞的訊息

  1. Creating Notifications  
  2. + notificationWithName:object:  
  3. + notificationWithName:object:userInfo:  
  4. Getting Notification Information  
  5. – name  
  6. – object  
  7. – userInfo  
(2)NSNotificationCenter :用於傳送訊息
  1. Getting the Notification Center  
  2. + defaultCenter  
  3. Managing Notification Observers  
  4. – addObserverForName:object:queue:usingBlock:  
  5. – addObserver:selector:name:object:  
  6. – removeObserver:  
  7. – removeObserver:name:object:  
  8. Posting Notifications  
  9. – postNotification:  
  10. – postNotificationName:object:  
  11. – postNotificationName:object:userInfo:  

demo(例子中基本上涉及到以上所有的方法了):

定義了兩個類:Poster(傳送訊息)和Observer(接受訊息)

Poster.h

  1. #import <Foundation/Foundation.h>
  2. @interface Poster : NSObject  
  3. -(void)postMessage;  
  4. @end  

Poster.m

  1. #import "Poster.h"
  2. @implementation Poster  
  3. -(void)postMessage{  
  4.     //1.下面兩條語句等價
  5.     //二者的區別是第一條語句是直接傳送訊息內容,第二條語句先建立一個訊息,然後再發送訊息
  6.     [[NSNotificationCenter defaultCenter] postNotificationName:@"PosterOne" object:@"This is posterone!"];  
  7. //    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"PosterOne" object:@"This is posterone"]];
  8.     //2.下面兩條語句等價
  9.     //引數:userInfo  --- Information about the the notification.
  10.     [[NSNotificationCenter defaultCenter] postNotificationName:@"PosterTwo" object:@"This is postertwo" userInfo:[NSDictionary dictionaryWithObject:@"value" forKey:@"key"]];  
  11. //    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"PosterTwo" object:@"This is postertwo" userInfo:[NSDictionary dictionaryWithObject:@"value" forKey:@"key"]]];
  12. }  
  13. @end  

Observer.h

  1. #import <Foundation/Foundation.h>
  2. @interface Observer : NSObject  
  3. -(void)observer;  
  4. @end  

Observer.m

  1. #import "Observer.h"
  2. @implementation Observer  
  3. -(void)observer {  
  4.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@"PosterOne" object:nil];  
  5.     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack2:) name:@"PosterTwo" object:nil];  
  6.     //刪除所有的observer
  7. //    [[NSNotificationCenter defaultCenter] removeObserver:self];
  8.     //刪除名字為name的observer
  9. //    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"PosterOne" object:nil];
  10. }  
  11. -(void)callBack1:(NSNotification*)notification{  
  12.     NSString *nameString = [notification name];  
  13.     NSString *objectString = [notification object];  
  14.     NSLog(@"name = %@,object = %@",nameString,objectString);  
  15. }  
  16. -(void)callBack2:(NSNotification*)notification{  
  17.     NSString *nameString = [notification name];  
  18.     NSString *objectString = [notification object];  
  19.     NSDictionary *dictionary = [notification userInfo];  
  20.     NSLog(@"name = %@,object = %@,userInfo = %@",nameString,objectString,[dictionary objectForKey:@"key"]);  
  21. }  
  22. @end  

main.m

  1. #import <Foundation/Foundation.h>
  2. #import "Poster.h"
  3. #import "Observer.h"
  4. int main(int argc, constchar * argv[])  
  5. {  
  6.     @autoreleasepool {  
  7.         //注意這裡的順序,要先observer,然後再poster
  8.         Observer *myObserver = [[Observer alloc] init];  
  9.         [myObserver observer];  
  10.         Poster *poster = [[Poster alloc] init];  
  11.         [poster postMessage];  
  12.     }  
  13.     return 0;  
  14. }  
如果你明白這個demo的話我想你就明白訊息是怎麼傳送的了。大笑