KVC全称 Key-value coding, 译为键值编码
键值编码是NSKeyValueCoding非正式协议提供的一种通过字符串快速访问对象属性的一种方式. Foundation框架中,NSObject默认都遵循了此协议.因此NSObject 及其子类都默认可以使用这种方式快速访问对象属性.
NSKeyValueCoding的核心方法:
setValue:ForKey: setValue:ForKeypath: (通过key/keypath字符串设置值)
valueForKey: valueForKeypath: (通过key/keypath字符串获取值)
keypath 是由.连接的一个类似属性dot 语法的访问深层级属性的字符串
如果查找不到对应的属性, 会走到 setValueForUndefinedKey: valueForUndefinedKey:等方法
具体查找路径如下:
-
取值
方法遍历:
get<Key>-><Key>->is<Key>->_<Key>判断是否支持直接获取实例变量
accessInstanceVariableDirectly如果支持, 进行实例变量遍历:
_<Key>->_is<Key>-><Key>->is<Key>如果沿此路径找不到, 则会走到
valueForUndefinedKey: -
赋值
方法遍历:
set<Key>->_set<Key>->setIs<Key>判断是否支持直接获取实例变量
accessInstanceVariableDirectly如果支持, 进行实例变量遍历:
_<Key>->_is<Key>-><Key>->is<Key>
对于NSArray,NSSet等容器类, Foundation有特殊的实现