√ 概述
√ 鍵值編碼KVC
全稱是Key-value observing,翻譯成鍵值觀察。提供了一種當其它對象屬性被修改的時候能通知當前對象的機制。再MVC大行其道的Cocoa中,KVO機制很適合實現model和controller類之間的通訊。
♥ KVC的操作方法由NSKeyValueCoding協議提供,而NSObject就實現了這個協議,也就是說ObjC中幾乎所有的對象都支持KVC操作。
常用的KVC操作方法如下:
¤ 動態設置: setValue:屬性值 forKey:屬性名(用于簡單路徑)、setValue:屬性值 forKeyPath:屬性路徑(用于復合路徑,例如Person有一個name類型的屬性,那么person.namet就是一個復合屬性)
¤ 動態讀?。?nbsp;valueForKey:屬性名 、valueForKeyPath:屬性名(用于復合路徑)
♥ KVC使用起來比較簡單,但是它如何查找一個屬性進行讀取呢?具體查找規則(假設現在要利用KVC對a進行讀?。?/strong>
♥ 點語法和KVC
在上面介紹的 ¤ 動態讀取 中的KeyPath是一個被點操作符隔開的用于訪問對象的指定屬性的字符串序列。比如KeyPath address.將會訪問消息接收對象所包含的person.name屬性中包含的一個name屬性。其實KeyPath說白了就是我們平時使用點操作訪問某個對象的屬性時所寫的那個字符串。
在實現了訪問器方法的類中,使用點語法和KVC訪問對象其實差別不大,二者可以任意混用。但是沒有訪問起方法的類中,點語法無法使用,這時KVC就有優勢了。
√ 鍵值監聽KVO
KVO其實是一種觀察者模式,利用它可以很容易實現視圖組件和數據模型的分離,當數據模型的屬性值改變之后作為監聽器的視圖組件就會被激發,激發時就會回調監聽器自身。在ObjC中要實現KVO則必須實現NSKeyValueObServing協議,不過幸運的是NSObject已經實現了該協議,因此幾乎所有的ObjC對象都可以使用KVO。
常用的操作方法如下:
♥ 注冊指定Key路徑的監聽器: addObserver: forKeyPath: options: context:
♥ 刪除指定Key路徑的監聽器: removeObserver: forKeyPath、removeObserver: forKeyPath: context:
♥ 回調監聽: observeValueForKeyPath: ofObject: change: context:
KVO的使用步驟也比較簡單:
新聞熱點
疑難解答