一、KVC(Key-value coding)介紹
1.鍵值編碼是一種間接訪問對象的屬性使用字符串來標識屬性土涝,而不是通過調(diào)用存取方法备蚓,直接或通過實例變量訪問的機制,非對象類型的變量將被自動封裝或者解封成對象岭粤,很多情況下會簡化程序代碼;
2.KVC的缺點:一旦使用 KVC 你的編譯器無法檢查出錯誤,即不會對設(shè)置的鍵特笋、鍵路徑進行錯誤檢查,且執(zhí)行效率要低于合成存取器方法和自定的 setter 和 getter 方法。因為使用 KVC 鍵值編碼,它必須先解析字符串,然后在設(shè)置或者訪問對象的實例變量巾兆。
二猎物、KVC底層實現(xiàn)原理
方法調(diào)用:?
KVC運用了一個isa-swizzling技術(shù). isa-swizzling就是類型混合指針機制, 將2個對象的isa指針互相調(diào)換, 就是俗稱的黑魔法.
KVC主要通過isa-swizzling, 來實現(xiàn)其內(nèi)部查找定位的. 默認的實現(xiàn)方法由NSOject提供
isa指針, 如其名稱所指,(就是is a kind of的意思), 指向分發(fā)表對象的類. 該分發(fā)表實際上包含了指向?qū)崿F(xiàn)類中的方法的指針, 和其它數(shù)據(jù)。
比如說如下的一行KVC的代碼:
KVC鍵值查找原理
setValue:forKey:搜索方式
valueForKey:的搜索方式