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有特殊的实现