键值编码Key-Value Coding,一种非正式的协议,提供一种机制通过使用字符串来间接访问对象的属性,而不是通过我们明确的存取方式来获取。
KVC的规则:
当调用valueForKey、setValue:forKeyPath(二级属性)方法时,
首先判断是否主动创建了属性,检查是否存在相应的key的set方法,如果存在,就调用set方法。
如果没有,+(Bool)accessInstanceVariablesDirectly默认返回YES,就依次按照get<key>,<key>,is<key>查找。
如果还没找到,继续按照其他类型规则去查找,如数组必须实现countOf<key>,objectIn<key>AtIndex:(NSInteger)index。
若还是没有找到,就会报错,valueForUndefineKey:(不希望崩溃,就重写该方法,抛出异常,注意:nil执行任何方法都不会导致崩溃,因此可以返回nil。)
设置:
依次按照属性名查找:_key, key, isKey
用途:
1.知道别的类的私有属性名字,就可以通过valueForKey来改变其值。
2.当服务器传过来的数据,可能某个没有,可以结合runtime方法混写的方式扩展setObject:forKey:方法。
3.UI控件的属性代码修改样式
4.表模型,字典转模型,模型转字典。