標籤:運行時 方式 賦值 nbsp 同名 返回字典 識別 沒有 ios
1、KVC(索引值編碼)【1】、什麼是KVC?
- KVC俗稱索引值編碼,就是可以通過一系列方法(
KVC方法)根據對象的屬性名稱作為key值,傳入具體的value值賦值給對象的屬性。
【2】、KVC的作用
- 通常,當字典中的key與對象的屬性名稱完全相同時,這是我們能夠通過使用KVC將字典中的value值設定給對象的屬性;不過,切記:對象中的屬性只能比字典中的key多而不能少,一旦字典中的key在對象中找不到與之對應的屬性,程式崩潰;這也是KVC一個最致命的缺點。
【3】、KVC三種形式
key中包含路徑:
使用setValue:forKeyPath:方法給對象屬性賦值:
使用valueForKeyPath方法取出對象的屬性值:
同理,數組使用valueForKeyPath方法,也能夠將數組中對象的key屬性抽取出來組成一個新的數組;
數組使用valueForKeyPath方法,在key中添加@符號 + 要執行的計算操作;可以實現指定的計算功能:
字典使用KVC:
字典使用setValuesForKeysWithDictonary:方法,將字典中key對應的value值設定到對象的對應屬性;不過切記字典中的key在對象中一定要有與之對應的屬性(即:對象中的屬性只能多於字典中的key),如果字典中的key在對象中找不到與之對應的屬性,程式崩潰。
對象使用dictionaryWithValuesForKeys:方法,通過傳入對象的屬性數組,返回字典;字典中將對象的屬性以索引值對的形式存放。
2、使用KVC注意事項:
使用KVC不包含路徑方式,給對象屬性賦值、或者根據key從對象中取值時,key中一定不能包含路徑;因為,不帶Path的KVC方法預設將傳入的字串當成一個完整的key,並不能識別其中的路徑(即:key中的.符號);如果傳入路徑程式崩潰。
數組使用KVC不包含路徑方式,只能執行計算數組長度的功能;不能執行其他動作,否則,程式將會崩潰。
數組使用KVC的forKeyPath方法計算長度時,傳入對象的屬性名稱無效;返回整個數組的長度:
總結:
KVC使用forKey類型方法時,key中不能傳入路徑;因為,forKey類型方法只會將傳入的字串當成整個key;在對象中尋找屬性時沒有找到與key同名的屬性時程式報錯。
數組使用forKey類型的方法時,只能執行計算長度的功能;即:array.count,不過,在key中必須使用@符號,表明這是在執行計算操作。
KVC使用forKeyPath類型方法時,運行時系統能夠根據key中的路徑找到與之對應的對象的屬性;進行賦值、取值操作。
KVC使用forKeyPath類型方法時,能夠在將要執行的計算操作結合@符號添加到key中;執行計算功能。
字典使用KVC時,能夠根據字典中的鍵對應的值設定到對象對應的屬性中;也能根據對象屬性數組,將對象的屬性打包到字典中使用。
iOS核心筆記—KVC機制