NSNotificationCenter
在這裡第一步和第二步的順序可以互換,一般樓主我喜歡先在需要傳送訊息的頁面傳送訊息,然後再在需要監聽的頁面註冊監聽。要注意的是不管是通知中心還是KVO都需要在頁面銷燬之前移除監聽。
- 註冊觀察者
/**
* 觀察者註冊訊息通知
*
* @param addObserver 觀察者 self
*
* @param selector 回撥方法 notification
*
* @param name 訊息的名稱 notifitionMassage
*
* @param object 傳送訊息的物件,表示接收哪個傳送者的通知,如果第四個引數為nil,則接收所有傳送者的通知。
*/
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notification:)
name:@"notifitionMassage" object:nil];
複製程式碼
- 傳送訊息通知
/**
* 傳送訊息通知
*
* @param postNotificationName 傳送訊息的名稱 notifitionMassage 這裡一定要和觀察者中訊息的名稱一致,否則監測不到訊息
*
* @param object 傳送訊息的物件 如果這裡填nil,而且觀察者要監測同時監測了好幾個訊息,但是這裡我們只需要這一條特定的訊息的時候,此時就無法達到我們想要的
* 結果了。
*/
[[NSNotificationCenter defaultCenter]postNotificationName:@"notifitionMassage" object:nil];
複製程式碼
- 觀察者處理訊息(這個方法也就是觀察者的回撥方法)
/**
* 觀察者處理訊息(這個方法也就是觀察者的回撥方法)
*
* @param massage 接收到訊息的資訊,主要用於傳值。(裡面包含了Name:訊息的名稱 object:訊息的傳送者 userInfo:訊息傳遞的資料資訊)
*/
-(void)notification:(NSNotification *)massage{
//在這裡做我們想要的操作
}
複製程式碼
- 登出觀察者
a. 最好的辦法就是在註冊觀察者的頁面的dealloc方法中去移除觀察者
-(void)dealloc{
/**
* 移除觀察者的方法
*
* @param removeObserver 監聽的物件 self
*
* @param name 訊息的名稱
*
* @param object 傳送訊息的物件 如果傳送訊息的時候填寫了物件,那麼這裡就是那個物件
*/
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
複製程式碼
b. 單個移除
[[NSNotificationCenter defaultCenter]removeObserver:self name:@"notifitionMassage" object:nil];
複製程式碼
複製程式碼