KVC 键值编程的搜索模式
来源:互联网 发布:个人淘宝打假赚钱 编辑:程序博客网 时间:2024/06/03 13:10
键值属性
是一种访问属性的键值对机制,其中key是属性的名称,value是属性的值。
- 通过KVC可以减少代码量,在需要根据变量访问指定属性时尤其如此。
- 降低耦合性。
Key-value coding attempts to use accessor methods to get and set values, before resorting to directly accessing the instance variable.
KVC会首先尝试使用accessor methods(getter/setter)方法来访问属性的值,若未找到,然后才是直接访问实例变量(instance variable)。
简单属性的搜索模式
setValue:forKey:默认的搜索顺序
- KVC从receiver(
[receiver massage]
)的类中查询访问方法set<Key>
。 - 如果
set<Key>
未找到,且receiver的类方法accessInstanceVariablesDirectly返回YES,则receiver依次搜索名字为_<key>, _is<Key>, <key>, is<Key>,
的实例变量,注意搜索顺序。 - 如果找到了访问方法或者实例变量,则利用其设置对应的value。
- 如果既没有搜索到访问方法,也没有找到实例变量,则receiver会调用 setValue:forUndefinedKey: 方法
valueForKey:默认的搜索模式
- 首先按
get<Key>、<key>、is<Key>
的顺序查找getter方法,找到直接调用。- 若方法的返回结果类型为是一个对象指针,则直接返回结果;
- 若类型为能够转化为NSNumber的标量,做NSNumber转换后返回;
- 否则,转换为NSValue返回。
- 上面的getter没有找到,查找
countOf<Key>、objectIn<Key>AtIndex:、<Key>AtIndexes
格式的方法。
如果countOf<Key>
和另外两个方法中的一个找到,那么就会返回一个可以响应NSArray所有方法的集合代理(collection proxy object)。发送给这个代理集合(collection proxy object)的NSArray消息方法,就会以countOf<Key>、objectIn<Key>AtIndex:、<Key>AtIndexes
这几个方法组合的形式调用。如果receiver的类实现了get<Key>:range:
方法,给方法也会用于性能优化。 - 还没查到,那么查找
countOf<Key>、enumeratorOf<Key>、memberOf<Key>:
格式的方法。如果这三个方法都找到,那么就返回一个可以响应NSSet所有方法的集合代理(collection proxy object)。发送给这个代理集合(collection proxy object)的NSSet消息方法,就会以countOf<Key>、enumeratorOf<Key>、memberOf<Key>:
组合的形式调用。 - 还是没查到,那么如果类方法accessInstanceVariablesDirectly返回YES,那么按
_<key>,_is<Key>,<key>,is<Key>
(注意大小写)的顺序直接搜索实例变量。如果搜索到了,则返回receiver相应实例变量的值。返回结果的处理见步骤1。 - 再没查到,调用
valueForUndefinedKey:
。
流程图有机会加上
有序集合的搜索模式(NSMutableArray)
唯一有序集合(?)的搜索模式()
无序集合的搜索模式(NSMutableSet)
0 0
- KVC 键值编程的搜索模式
- 键值编程之KVC
- IOS KVC(键值编码)模式
- OC中键值编程(KVC)的实现
- 键值编码(KVC)-简单的KVC
- iOS监听模式系列之键值编码KVC、键值监听KVO的简单介绍和应用
- obj-c编程16:键值编码(KVC)
- OC键值编程(KVC)-Key路径
- 基于键值的观察者模式编程
- iOS中键值编码KVC的学习
- KVO与KVC键值监听的机制
- objective-c - 基础篇 - KVC键值转换设计模式
- oc的kvc模式
- OC-KVC-键值编码
- KVC-键值编码
- 键值编码KVC
- 019.KVC 键值编码
- 键值编码KVC
- UML类之间关系的通俗讲解
- 医疗行业大数据应用实例
- 下载文件
- 关于cocos2dx3.0 cpp回调lua函数新方法
- undefined reference to 'pthread_create'解决方法
- KVC 键值编程的搜索模式
- Android_UI开发详解之ActionBar
- 单例模式
- STL容器特征总结
- 【转载】求模和求余的区别
- cornerstone 使用总结
- netty初步,与各个版本的比较
- Android 之 内存管理
- 搜索引擎开发系列文章