iOS-KVO(Key-Value-Observation)模式簡單實現例子

一開始學Objective-C的時候聽過KVO、KVC模式,但是因為還有NSNotificationCenter和代理等等已經能實現我當時的需求,所以連KVO是什麼的縮寫都沒有查就跳過了…最近特地挪出一部分的時間來繼續加強iOS開發能力,今天的部分就是研究Block回調方法和KVO的基本用法。

KVO模式,當監聽的變量發生變化時做出行動

我每天都會安排一點點時間用在繼續學習上面,前兩天看到一個創業項目叫做Code4Startup,一位31歲的爸爸,白天上班工作,晚上創業。這個網站是用視頻code給你看,怎麼在短時間利用現有的資源去建立一個看起來很專業的網站。其中一個項目就介紹了用firebase+AngularJS創建一個線上web應用的例子(線上接案系統),可以看看。

我過了一遍code4Startup裡面的兩個項目,其中AngularJS有的那個功能超厲害,當我和你同時在那個網站上操作的時候,如果我發了一個任務,你那邊就會馬上刷新,你一留言,我這裏也馬上刷新,這就是AngularJS一開始出名的功能吧,好像叫做變量的雙向綁定。

KVO也就是這個功能,你可以監聽某個變量是不是有變化,當變化的時候可以做出相應的動作。

舉一個例子,有些APP會支持修改skin的功能,就是設定某種模板樣式,讓所有的按鈕、tableView等等變成可愛版、華麗版等等,也可以用到這個功能,不過可能NSNotificationCenter更好用?

KVO的簡單實現

KVO模式基本實現例子

我這裏創建一個叫做Student的類別繼承NSObject(就是要建立一個Model),Student有一個變量叫做age。

然後創建一個ViewController 上面有2個TextField用於顯示東西、2個Button用於操作Student數據

Student方面:

ViewController方面

下面第一個函數的意思是為student增加一個監控者為self,監控的是student中的age屬性,當屬性值發生變化時會調用第二個函數,而contet就是為了區別調用對象的。

當使用_property時,KVO會沒有反應了

一開始我習慣用_property而不是用self.property,而這個時候KVO就會失效。

4 thoughts on “iOS-KVO(Key-Value-Observation)模式簡單實現例子

  1. 感謝你說明這麼淺顯易懂的例子,我跟你一樣一開始也是覺得有其它方式就能達到目的,趁著颱風假期間播空了解博大精深的Communication Patterns。

    我有寫篇文章引用你這篇文章喔~ :D

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *