-
Key-Value-Coding
键值编码
可以通过一个Key来访问摸个属性。
常见的API:
setValue:forKeyPath:
setValue:forKey:
valueForKeyPath:
valueForKey:
-
实现原理
-
setValue:forKey:
- 通过key 按照
setKey: 、_setKey:
的顺序查找方法。- 未查到,询问是否可以直接访问成员变量
accessInstanceVariablesDirectly:
默认返回YES
。- 返回
YES
。 按照setKey: 、_setKey:
的顺序查找方法修改成员变量。 - 返回
NO
。 调用setValue:forUndefinedKey:
方法报错。
- 返回
- 未查到,询问是否可以直接访问成员变量
- 查到后直接调用。
- 通过key 按照
-
valueForKey:
- 通过key 按照
getKey: 、key: 、_Key: 、_isKey:
的顺序查找方法。- 未查到,询问是否可以直接访问成员变量
accessInstanceVariablesDirectly:
默认返回YES
。- 返回
YES
。 按照getKey: 、key: 、_Key: 、_isKey:
的顺序查找方法取值。 - 返回
NO
。 调用setValue:forUndefinedKey:
方法报错。
- 返回
- 未查到,询问是否可以直接访问成员变量
- 查到后直接调用。
- 通过key 按照
-