小喵iOS開發成長記:通知(Notification)快速入門

來源:互聯網
上載者:User

標籤:

(小喵家的哈比鎮樓)

小喵最近在整理資料。看到了通知這個東東,忍不住給大家分享一下自己的學習所得。

什麼是通知                                                

通知(Notification)是開發架構中觀察者模式的一種實現方式,內部的實現機制由Cocoa架構支援,通常用於試圖控制器和資料模型的互動。通過通知,可以向一個或者多個對象發送訊息。

繼承自NSObject,實現了NSCopying Protocol協議。

通知通過通知中樞(NSNotificationCenter)廣播給其他對象。通知包含一個名稱(name), 對象(object屬性), 和一個可選字典(dictionary 屬性)三個參數。這些參數協助完成通知操作。

通知的原理                                                  

Notification一個 對象非常簡單,就是poster要提供給observer的資訊包裹。Notification 對象有兩個重要的成員變數:name和object。一般name用來唯一標示一個通知對象,object都是指向寄件者(poster)(為了讓observer在接收到notification時可以回調到poster)所以,Notification有兩個方法:- (NSString *)name, - (id)object可供調用。同時,Notification對象還包含一個參數,就是字典(選擇性參數),這個字典中儲存一些傳值過程中的資訊,供接收者使用。系統要求這個參數是不可變字典。

以上資訊構建好後,我們就可以建立一個通知。

NSNotification *notification = nil;

notification = [NSNotification notificationWithName: aName object: aObj userInfo: aDictionary];

其中,aName就是notification對象的名稱,aObj 就是寄件者,aDictionary是通知的可選字典參數。

通知建立好後就可以在必要的時候發送通知,發送通知的時候,需要一個控制中心來發送通知,這個控制中心就是通知中樞(NSNotificationCenter)。我們也可以通過控制中心建立並發送通知,通常我們也是這麼做得。 

通知的實際運用                                            

1. 頁面關聯性不大,但需要傳遞資訊的地方。這兩個頁面一個作為寄件者,一個作為監聽者;

2. 需要向多個地方發送資訊。一個頁面作為寄件者,多個頁面作為監聽者。

如何使用通知                                                

1.註冊通知

2.發送通知

3.移除通知

代碼實現                                                    

建立一個ViewController,修改為MRC。在.m檔案裡面操作。

先看註冊通知

 1 - (void)viewDidLoad { 2     [super viewDidLoad]; 3     UIView *mainView = [[[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds]autorelease]; 4     self.view = mainView; 5      6     UIButton *redButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 7     redButton.frame = CGRectMake(100, 100, 100, 30); 8     [redButton setTitle:@"Red" forState:UIControlStateNormal]; 9     [redButton addTarget:self action:@selector(setRedColor) forControlEvents:UIControlEventTouchUpInside];10     [self.view addSubview:redButton];11     12     UIButton *blueButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];13     [blueButton setTitle:@"Blue" forState:UIControlStateNormal];14     blueButton.frame = CGRectMake(100, 150, 100, 30);15     [blueButton addTarget:self action:@selector(setBlueColor) forControlEvents:UIControlEventTouchUpInside];16     [self.view addSubview:blueButton];17     /**18      *  註冊通知19      */20     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doChange:) name:@"ColorChange" object:nil];21    22 }

 

發送通知

 1 - (void)setBlueColor{ 2     /** 3      *  發送通知 4      */ 5     NSDictionary *dic = [NSDictionary dictionaryWithObject:@"blueColor" forKey:@"color"]; 6     [[NSNotificationCenter defaultCenter] postNotificationName:@"ColorChange" object:self userInfo:dic]; 7 } 8  9 - (void)setRedColor{10     /**11      *  發送通知12      */13     NSDictionary *dic = [NSDictionary dictionaryWithObject:@"redColor" forKey:@"color"];14     [[NSNotificationCenter defaultCenter]postNotificationName:@"ColorChange" object:self userInfo:dic];15 }16 17 - (void)doChange:(NSNotification *)notification{18     NSDictionary *dic = [notification userInfo];19     NSString *colorStr = [dic valueForKey:@"color"];20     UIColor *color = nil;21     22     if ([colorStr isEqualToString:@"blueColor"]) {23         color = [UIColor blueColor];24     }25     if ([colorStr isEqualToString:@"redColor"]) {26         color = [UIColor redColor];27     }28     self.view.backgroundColor = color;29 }

 

移除通知

 

1 - (void)dealloc{2     /**3      *  移除通知4      */5     [[NSNotificationCenter defaultCenter]removeObserver:self];6     [super dealloc];7 }

實現效果如下。點擊紅色螢幕變成紅色,點擊藍色,螢幕變成藍色。

 

小喵iOS開發成長記:通知(Notification)快速入門

聯繫我們

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