iOS開發:NSNotificationCenter,通知中心的使用
在開發過程中,使用通知的地方還是很多的,通知中心(NSNotificationCenter)實際上上一個訊息通知機制,是在程式內部提供的一種廣播機制。舉一個經典的應用場景:任意物件可以傳送通知到中心,同時任意物件也可以監聽中心傳送的通知。也就是說,把接收到的訊息,根據內部的訊息轉發表,把訊息轉發給需要的物件。
一、 使用通知的步驟
1.在需要接收通知的地方添加註冊觀察者;
2.在需要的時候傳送通知訊息;
3.接收通知,接到通知之後執行的方法;
4.移除觀察者。
二、例項
在這裡我用通知來改變介面顏色的例項來說明,具體如下圖所示:
控制器一的設定:
控制器二的設定:
Main.storyboard裡面的設定
執行效果:
部分程式碼:
/*
4個引數:
(1)觀察者(向通知中心新增的通知接收者),self表示是當前的控制器
(2)觀察者接收到通知後進行的響應事件操作(接收到通知後需要呼叫的方法)
(3)通知的名字(舉個例子,相當於FM電臺中的頻道一樣)
(4)接收發送者的通知,nil表示是接收所有傳送者的通知(預設狀態都設定為nil)
*/
//1.新增觀察者
[[
NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor:) name:@"ChangeColor" object:nil];/*
(1)通知的名字
(2)通知的傳送者
(3)附帶資訊
*/
//當觀察者的object置為nil時,可以傳值;當觀察者接收固定物件的通知時(相當於觀察者object不置為nil時),可以用來指定通知的傳送者
//2.傳送通知(傳送通知的時候也可以帶引數傳送)
[[NSNotificationCenter defaultCenter]
postNotificationName:@"ChangeColor" object:[UIColor redColor]];//3.傳送過來通知,接到通知之後執行的方法(接受通知)
- (void)changeColor:(NSNotification *)notifi {
self.view.backgroundColor = notifi.object;
}
//4.移除觀察者 self
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
// [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ChangeColor" object:nil];
}
例子雖然簡單,但是隻要能理解這個通知中心的原理,就是一個成功的例子。。。
三、其他注意事項
1.通知中心的那個類,是使用的單例設計模式,每一個應用程式都會有一個預設的通知中心,可以用來排程通知的傳送的接受;
2. 通知機制是實現應用程式中物件之間通訊的便捷工具,它可以讓物件可以知道其他地方發生的改變。一般情況下,一個物件新增為通知觀察者,是想讓它在相應的事件發生或者即將發生的時候進行改變狀態;
3.通知不僅僅侷限於應用程式內部的通訊,還可通過分散式通知,一個程序可將發生的事件通知給其他另外一個程序;
4.註冊通知時,要具體到通知的名稱和傳送的物件,對應用程式應該觀察的通知要有所選擇;
5.儘可能快速高效地實現處理通知的方法,避免新增或者移除很多觀察者;
6.如果傳送的通知指定了物件,那麼觀察者接收的通知設定的物件要與其一致,這樣才能接收到通知,但是接收通知如果將這個物件設定為nil,那麼就會接收一切通知;
7.觀察者的SEL函式指標可以帶有一個引數,這個引數就是傳送的物件本身,可以通過這個引數獲取到訊息物件的引數,實現傳值。
四、其他還有一種註冊通知的方法,在Viewwillappear方法裡面新增觀察者,然後在Viewwilldisappear方法裡面移除觀察者,即在頁面出現的時候註冊通知,頁面消失的時候移除通知。需要注意的是:僅僅在Viewwillappear方法裡面新增觀察者,沒有在Viewwilldisappear方法裡面移除觀察者,會造成當訊息發生時,方法會多次被呼叫。