概述
KVC是Key Value Coding的简称,即键值编码,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。
KVC使用
(1)获取值
valueForKey: 传入NSString属性的名字
valueForKeyPath: 属性的路径,xx.xx
valueForUndefinedKey: 默认实现是抛出异常,可重写这个函数做错误处理
(2)修改值
setValue:forKey:
setValue:forKeyPath:
setValue:forUnderfinedKey:
setNilValueForKey: 对非类对象属性设置nil时调用,默认抛出异常。
KVC用途
1、对私有变量进行赋值
2、字典转模型
KVC键值查找
1、setValue:forKey:搜索方式
(1)首先搜索setKey:方法。(key指成员变量名,首字母大写)
(2)上面的setter方法没找到,如果类方法accessInstanceVariablesDirectly返回YES。那么按 _key,_isKey,key,iskey的顺序搜索成员名。(NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)
(3)如果没有找到成员变量,调用setValue:forUnderfinedKey:
2、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名。
(5)再没找到,调用valueForUndefinedKey。