iOS-KVC调用原理

KVC机制是如何通过key找到value。
• setValue:forKey:的搜索方式 :
1、首先搜索setKey:方法。(key指成员变量名,首字母大写)
2、上面的setter方法没找到,如果类方法accessInstanceVariablesDirectly返回 YES。那么按 _key,_isKey,key,iskey的顺序搜索成员名。 (NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)
3、如果没有找到成员变量,调用setValue:forUnderfinedKey:

• valueForKey:的搜索方式
1、首先按getKey,key,isKey的顺序查找getter方法,找到直接调用。如果是
BOOL、int等内建值类型,会做NSNumber的转换。
2、上面的getter没找到,查找countOfKey、objectInKeyAtindex、KeyAtindexes
格式的方法。如果countOfKey和另外两个方法中的一个找到,那么就会返回一
个可以响应NSArray所有方法的代理集合的NSArray消息方法。
3、还没找到,查找countOfKey、enumeratorOfKey、memberOfKey格式的方
法。如果这三个方法都找到,那么就返回一个可以响应NSSet所有方法的代理
集合。
4、还是没找到,如果类方法accessInstanceVariablesDirectly返回YES。那么按 _key,_isKey,key,iskey的顺序搜索成员名。

5、再没找到,调用valueForUndefinedKey。

你可能感兴趣的:(iOS-KVC调用原理)