KVC 概念
? ? ? KVC(Key-value coding)鍵值編碼,就是指iOS的開發(fā)中,可以允許開發(fā)者通過Key名直接訪問對象的屬性,或者給對象的屬性賦值。而不需要調(diào)用明確的存取方法。這樣就可以在運(yùn)行時(shí)動(dòng)態(tài)地訪問和修改對象的屬性。而不是在編譯時(shí)確定,這也是iOS開發(fā)中的黑魔法之一。很多高級(jí)的iOS開發(fā)技巧都是基于KVC實(shí)現(xiàn)的。
? ? ? ? 它是一種可以通過字符串的名字(key)來訪問類屬性的機(jī)制。而不是通過調(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中實(shí)現(xiàn)的類方法,默認(rèn)實(shí)現(xiàn)為返回YES)
3、如果沒有找到成員變量,調(diào)用setValue:forUnderfinedKey:

valueForKey檢索方式
1.1按先后順序搜索getKey,key,iskey,_key方法,若某一個(gè)方法被實(shí)現(xiàn),取到的即是方法返回的值,后面的方法不再運(yùn)行。如果是BOOL或者Int等值類型, 會(huì)將其包裝成一個(gè)NSNumber對象。
2.若這三個(gè)方法都沒有找到,則會(huì)調(diào)用+ (BOOL)accessInstanceVariablesDirectly方法判斷是否允許取成員變量的值。若返回NO,直接調(diào)用valueForUndefinedKey:,默認(rèn)是奔潰。若返回YES,會(huì)按先后順序取_key、_isKey、 key、isKey的值。
3.返回YES時(shí),_key、_isKey、 key、isKey的值都沒取到,調(diào)用- valueForUndefinedKey:方法。
