iOS 通知中心(NSNotificationCenter)

joker_king發表於2018-12-20

NSNotificationCenter

在這裡第一步和第二步的順序可以互換,一般樓主我喜歡先在需要傳送訊息的頁面傳送訊息,然後再在需要監聽的頁面註冊監聽。要注意的是不管是通知中心還是KVO都需要在頁面銷燬之前移除監聽。

  1. 註冊觀察者
/**
     *      觀察者註冊訊息通知
     *
     *      @param addObserver 觀察者  self
     *
     *      @param selector 回撥方法  notification
     *
     *      @param name 訊息的名稱  notifitionMassage
     *
     *      @param object 傳送訊息的物件,表示接收哪個傳送者的通知,如果第四個引數為nil,則接收所有傳送者的通知。
     */
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(notification:)
 name:@"notifitionMassage" object:nil];
複製程式碼
  1. 傳送訊息通知
/**
     *      傳送訊息通知
     *
     *      @param postNotificationName 傳送訊息的名稱  notifitionMassage 這裡一定要和觀察者中訊息的名稱一致,否則監測不到訊息
     *
     *      @param object 傳送訊息的物件  如果這裡填nil,而且觀察者要監測同時監測了好幾個訊息,但是這裡我們只需要這一條特定的訊息的時候,此時就無法達到我們想要的
     *                    結果了。
     */
    [[NSNotificationCenter defaultCenter]postNotificationName:@"notifitionMassage" object:nil];
複製程式碼
  1. 觀察者處理訊息(這個方法也就是觀察者的回撥方法)
/**
 *      觀察者處理訊息(這個方法也就是觀察者的回撥方法)
 *
 *      @param massage 接收到訊息的資訊,主要用於傳值。(裡面包含了Name:訊息的名稱 object:訊息的傳送者 userInfo:訊息傳遞的資料資訊)
 */
-(void)notification:(NSNotification *)massage{
//在這裡做我們想要的操作
}
複製程式碼
  1. 登出觀察者

a. 最好的辦法就是在註冊觀察者的頁面的dealloc方法中去移除觀察者

-(void)dealloc{
    /**
     *      移除觀察者的方法
     *
     *      @param removeObserver 監聽的物件  self
     *
     *      @param name  訊息的名稱
     *
     *      @param object 傳送訊息的物件  如果傳送訊息的時候填寫了物件,那麼這裡就是那個物件
     */
[[NSNotificationCenter defaultCenter]removeObserver:self];
}
複製程式碼

b. 單個移除

[[NSNotificationCenter defaultCenter]removeObserver:self name:@"notifitionMassage" object:nil];
複製程式碼
複製程式碼

相關文章