KVC的機制
KVC是cocoa的大招,用來間接獲取或者修改對象屬性的方式。
一、KVC的作用:
KVC大招之一:
[self
setValuesForKeysWithDictionary:dict];
KVC的大招之二:
使用KVC在獲取數值時,如果指定對象不包含keyPath的"鍵名",會自動進入對象的內部查找
如果取值的對象是一個數組,同樣返回一個數組
[self.carGroups valueForKey:@"title”];//
會在嵌套的plist文件中依次查找。
kvc機制的注意事項:
1.
根據字典給模型賦值,一個個鍵值對給模型賦值,太麻煩了,利用KVC將字典中所有內容賦值給模型,需要注意如果模型中的屬性和字典中key不匹配的時候,就會報錯。報找不到模型中的屬性。
2.模型中的屬性可以不全部出現在plist文件中
二、KVC的使用
1.KVC可以改變私有變量。
2.KVC支持數學運算。
3.forKeyPath包含了forKey的功能。
4.forKeyPath中可以利用.運算符,一層一層的往下查找對象的屬性。
5.如果forKeyPath查找對象的某一個屬性爲數組類型,會返回一個新的數組。
6.賦值
[self
setValue:tabBar
forKeyPath:@"tabBar"];
7.取值
[self
valueForKeyPath:@"tabBar”];
三、KVC內部的實現原理
KVC的內部實現原理:
利用KVC給模型屬性賦值的內部實現原理(setValuesForKeysWithDictionary):會遍歷字典中的所有鍵值對,然後調用模型對象的setValue:forKey,根據字典中的所有key,給模型屬性賦值。但是模型中的屬性和字典中不匹配的時候,當模型調用setValue:forKey,這時候根據key沒有找到模型中屬性的時候,就會報錯。
解決方式:
利用運行時機制根據模型中的屬性找到字典中的鍵值對給屬性賦值。這樣就不會報找不到對應key的錯誤了。