iOS基础 - KVC

120 阅读1分钟

KVC全称 Key-value coding, 译为键值编码

键值编码是NSKeyValueCoding非正式协议提供的一种通过字符串快速访问对象属性的一种方式. Foundation框架中,NSObject默认都遵循了此协议.因此NSObject 及其子类都默认可以使用这种方式快速访问对象属性.

NSKeyValueCoding的核心方法:

setValue:ForKey: setValue:ForKeypath: (通过key/keypath字符串设置值)

valueForKey: valueForKeypath: (通过key/keypath字符串获取值)

keypath 是由.连接的一个类似属性dot 语法的访问深层级属性的字符串

如果查找不到对应的属性, 会走到 setValueForUndefinedKey: valueForUndefinedKey:等方法

具体查找路径如下:

  1. 取值

    方法遍历: get<Key> -> <Key>-> is<Key>->_<Key>

    判断是否支持直接获取实例变量 accessInstanceVariableDirectly

    如果支持, 进行实例变量遍历: _<Key> -> _is<Key>-><Key>->is<Key>

    如果沿此路径找不到, 则会走到valueForUndefinedKey:

  2. 赋值

    方法遍历: set<Key>->_set<Key>->setIs<Key>

    判断是否支持直接获取实例变量 accessInstanceVariableDirectly

    如果支持, 进行实例变量遍历: _<Key> -> _is<Key>-><Key>->is<Key>

对于NSArray,NSSet等容器类, Foundation有特殊的实现

Apple: Key-Value Coding Programming Guide