首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

iOS 通知中心:NSNotificationCenter 實戰教程

     編輯:C++ 入門

場景

兒童類 Children 定時器定期減少快樂值與飢餓值,低於閾值時發送通知。保姆類 Nurse 註冊觀察者,收到通知執行陪玩或餵食,恢復數值。

核心類設計

Children

  • 屬性:happyValue、hungryValue。
  • init 啟動 1 秒定時器 timeAction:。
  • 定時器每秒遞減數值,閾值檢查後 postNotificationName:object: 發送 happyValueNotification 或 hungryValueNotification,object 為 self。

Nurse

  • 持有 Children 引用。
  • initWithChildren: 中 addObserver:selector:name:object: 註冊兩個通知,object:nil 表示接收任意發送者。
  • 響應方法 happyValueChange、hungryValueChange: 調用 play、feed 恢復數值。
  • dealloc 中 removeObserver: 移除所有通知,防止野指針。

關鍵代碼片段

// 發送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"happyValueNotification" object:self];

// 註冊觀察者
[[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(happyValueChange)
    name:@"happyValueNotification"
    object:nil];

// 移除觀察者(推薦在 dealloc)
[[NSNotificationCenter defaultCenter] removeObserver:self];

運行流程

  1. main 創建 Children 和 Nurse,啟動 RunLoop。
  2. 定時器觸發,數值下降,發送通知。
  3. 通知中心分發給 Nurse,執行響應邏輯。
  4. 數值恢復,循環繼續。

最佳實踐

  • 通知名稱建議定義為常量字符串,避免拼寫錯誤。
  • object 參數可用於過濾發送者,此處用 nil 接收所有。
  • 務必在對象銷毀前移除觀察者,否則崩潰風險極高。
  • 通知為同步分發,耗時操作應異步處理。

總結

NSNotificationCenter 實現了鬆耦合的觀察者模式,適合跨層級、多對多的事件傳遞。本例展示了完整的發送-註冊-響應-清理生命週期,是 iOS 開發中通信機制的基礎範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved