Objective-C KVC、KVO

鍵值編碼KVC

KVC的操作方法由NSKeyValueCoding協議提供,而NSObject就實現了這個協議,也就是說ObjC中幾乎所有的對象都支持KVC操作,常用的KVC操作方法如下:

  • 動態設置
    setValue:屬性值 forKey:屬性名(用于簡單路徑)
    setValue:屬性值 forKeyPath:屬性路徑(用于復合路徑,例如Person有一個Account類型的屬性,那么person.account就是一個復合屬性)
  • 動態讀取
    valueForKey:屬性名
    valueForKeyPath:屬性名(用于復合路徑)

鍵值監聽KVO

KVO其實是一種觀察者模式,利用它可以很容易實現視圖組件和數據模型的分離,當數據模型的屬性值改變之后作為監聽器的視圖組件就會被激發,激發時就會回調監聽器自身。在ObjC中要實現KVO則必須實現NSKeyValueObServing協議,不過幸運的是NSObject已經實現了該協議,因此幾乎所有的ObjC對象都可以使用KVO。

在ObjC中使用KVO操作常用的方法如下:

  • 注冊指定Key路徑的監聽器: addObserver: forKeyPath: options: context:
  • 刪除指定Key路徑的監聽器: removeObserver: forKeyPath
  • removeObserver: forKeyPath: context:
  • 回調監聽 observeValueForKeyPath: ofObject: change: context:

KVO的使用步驟也比較簡單:
通過addObserver: forKeyPath: options: context:為被監聽對象(它通常是數據模型)注冊監聽器
重寫監聽器的observeValueForKeyPath: ofObject: change: context:方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • KCV 其實由于ObjC的語言特性,你根部不必進行任何操作就可以進行屬性的動態讀寫,這種方式就是Key Value...
    TYM閱讀 1,065評論 0 4
  • kvc簡述 kvc即鍵值編碼,在iOS中的應用主要體現在開發者通過key訪問對象的屬性或給對象的屬性賦值。這樣做最...
    RunnerFL閱讀 498評論 0 0
  • 由于ObjC主要基于Smalltalk進行設計,因此它有很多類似于Ruby、Python的動態特性,例如動態類型、...
    JonesCxy閱讀 377評論 0 0
  • 轉載:http://yulingtianxia.com/blog/2014/05/12/objective-czh...
    F麥子閱讀 992評論 0 0
  • 由于ObjC主要基于Smalltalk進行設計,因此它有很多類似于Ruby、Python的動態特性,例如動態類型、...
    JonesCxy閱讀 481評論 1 0