KVC的機制

KVC的機制
KVCcocoa的大招,用來間接獲取或者修改對象屬性的方式。
一、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的錯誤了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章