最近一直在研究KVC,所以和大家分享一下心得吧。KVC,即鍵值編碼,它提供了一種通過使用屬性的名稱來間接訪問對象屬性的方法。我們使用KVC時用到的最多的兩個方法如下:
基本調用方法
這兩個方法可以在接收消息對象沒有實現所訪問的屬性setter和getter方法的情況下,依然為該屬性進行賦值和取值操作,私有變量也是如此。
我們可以定義一個類:
.h文件如下:
.m文件如下:
然后我們隨便在一個控制器的view did load里對這個類進行初始化:
運行結果如下:
carName已經被正確賦值
接下來我們再看下運用KVC能否對類的私有變量進行取值賦值操作:
普通的賦值方式編譯都通不過:
我們換用KVC方式訪問如下:
運行結果如下:
也就是說,OC里面并沒有真正的私有變量,只要知道變量名稱就可以訪問并且操作這個變量。
說到這里,還有一個方法setValue:ForKeyPath:,可以通過鍵路徑來操作屬性內部的變量
注意別忘了初始化carNumber,否則賦值為nil
運行結果如下:
總結:
KVC是所有的NSObject都具有的特性,利用KVC我們可以為一個類填充很多的屬性,當目標類調用setValue:forKey:賦值時,如果目標類里沒有這個key,為了防止程序崩潰,我們需要手動實現setValue:(id)value forUndefinedKey:(NSString*)key和valueForUndefinedKey:(NSString*)key這兩個方法,用一個字典去接收value,同理,取值時用valueForUndefinedKey:(NSString*)key,根據key從字典取相應的value值。