KVC 概念
? ? ? KVC(Key-value coding)鍵值編碼咐容,就是指iOS的開發(fā)中,可以允許開發(fā)者通過Key名直接訪問對象的屬性薛耻,或者給對象的屬性賦值帜矾。而不需要調(diào)用明確的存取方法。這樣就可以在運行時動態(tài)地訪問和修改對象的屬性毁涉。而不是在編譯時確定沉帮,這也是iOS開發(fā)中的黑魔法之一。很多高級的iOS開發(fā)技巧都是基于KVC實現(xiàn)的。
? ? ? ? 它是一種可以通過字符串的名字(key)來訪問類屬性的機制遇西。而不是通過調(diào)用Setter馅精、Getter方法訪問。
? 關(guān)鍵方法定義在 NSKeyValueCodingProtocol
KVC支持類對象和內(nèi)建基本數(shù)據(jù)類型粱檀。
搜索方式
setValue檢索方式
1洲敢、首先搜索setKey:方法。(key指成員變量名茄蚯,首字母大寫)沒找到找_setKey之后是setIsKey
2压彭、上面的setter方法沒找到,如果類方法accessInstanceVariablesDirectly返回YES渗常。那么按 _key壮不,_isKey,key皱碘,iskey的順序搜索成員名询一。(NSKeyValueCodingCatogery中實現(xiàn)的類方法,默認實現(xiàn)為返回YES)
3癌椿、如果沒有找到成員變量健蕊,調(diào)用setValue:forUnderfinedKey:
valueForKey檢索方式
1.1按先后順序搜索getKey,key,iskey,_key方法,若某一個方法被實現(xiàn)踢俄,取到的即是方法返回的值缩功,后面的方法不再運行。如果是BOOL或者Int等值類型都办, 會將其包裝成一個NSNumber對象嫡锌。
2.若這三個方法都沒有找到,則會調(diào)用+ (BOOL)accessInstanceVariablesDirectly方法判斷是否允許取成員變量的值琳钉。若返回NO势木,直接調(diào)用valueForUndefinedKey:,默認是奔潰歌懒。若返回YES,會按先后順序取_key跟压、_isKey、 key歼培、isKey的值震蒋。
3.返回YES時,_key躲庄、_isKey查剖、 key、isKey的值都沒取到噪窘,調(diào)用- valueForUndefinedKey:方法笋庄。