
148
|
第九章
鍵值觀察
考慮下列常見情節,你的螢幕上有視圖—譬如說,裡頭有一個文字欄位,展示從模型擷
取的資訊。在模型—視圖—控制器之設計模式中,控制器負責掌握模型裡的資訊何時改
變,並且指示視圖更新它的展示內容,以便反映這項事實。然而,控制器怎麼知道何時
應該更新視圖呢?
有兩種選項可供選擇︰反覆不斷地檢查模型,看看是否有任何東西被改變,或者等待模
型通知控制器改變已經發生的事實。第一個選項是最容易實作的—建立定期從模型擷取
最新值的定時器。不過,這種技術的問題是太浪費、不經濟—假如模型不常改變,大
部分的更新活動都只是多餘的,這會浪費時間與 CPU 資源。在由電池供應電力的裝置
上,不必要地恣意使用 CPU 只會浪費電池的電力。
為了解決這個問題,Cocoa 提供一種稱作
鍵值觀察
(
key-value observing
)的機制。鍵值
觀察允許某個物件事先註冊,以便在另一個物件改變它的某個特性值時接獲通知。在前
述情節中,控制器會要求模型物件在資料產生改變時發出通知;當控制器收到來自模型
的訊息時,視圖隨即被更新。這樣做讓更新次數減到最少。
鍵值觀察機制幫助簡化註冊通知,以及通知任何需要被告知改變發生之物件的流程。任
何物件上的任何特性都可以被觀察,只要該特性的名稱符合鍵值編程的要求即可。
註冊變更通知
當你註冊要在改變發生當下接獲通知時,你告訴該物件你希望觀察三件事︰特性改變時
要被通知的物件、要被觀察的特性名稱、以及改變發生時觀察者應該被告知的相關資
訊。取決於你的需求,你也可以包含在特性值發生改變時要傳送給欲執行之方法的指標 ...