KVC機(jī)制是如何通過(guò)key找到value账嚎。
? setValue:forKey:的搜索方式 :
1涂身、首先搜索setKey:方法雄卷。(key指成員變量名,首字母大寫(xiě))
2蛤售、上面的setter方法沒(méi)找到丁鹉,如果類(lèi)方法accessInstanceVariablesDirectly返回 YES。那么按 _key悴能,_isKey鳄炉,key,iskey的順序搜索成員名搜骡。 (NSKeyValueCodingCatogery中實(shí)現(xiàn)的類(lèi)方法拂盯,默認(rèn)實(shí)現(xiàn)為返回YES)
3、如果沒(méi)有找到成員變量记靡,調(diào)用setValue:forUnderfinedKey:
? valueForKey:的搜索方式
1谈竿、首先按getKey,key摸吠,isKey的順序查找getter方法空凸,找到直接調(diào)用。如果是
BOOL寸痢、int等內(nèi)建值類(lèi)型呀洲,會(huì)做NSNumber的轉(zhuǎn)換。
2啼止、上面的getter沒(méi)找到道逗,查找countOfKey、objectInKeyAtindex献烦、KeyAtindexes
格式的方法滓窍。如果countOfKey和另外兩個(gè)方法中的一個(gè)找到,那么就會(huì)返回一
個(gè)可以響應(yīng)NSArray所有方法的代理集合的NSArray消息方法巩那。
3吏夯、還沒(méi)找到此蜈,查找countOfKey、enumeratorOfKey噪生、memberOfKey格式的方
法裆赵。如果這三個(gè)方法都找到,那么就返回一個(gè)可以響應(yīng)NSSet所有方法的代理
集合跺嗽。
4顾瞪、還是沒(méi)找到,如果類(lèi)方法accessInstanceVariablesDirectly返回YES抛蚁。那么按 _key,_isKey惕橙,key瞧甩,iskey的順序搜索成員名。
5弥鹦、再?zèng)]找到肚逸,調(diào)用valueForUndefinedKey。