iOS KVC和KVO简介
来源:互联网 发布:淘宝店铺介绍在哪里看 编辑:程序博客网 时间:2024/06/10 03:36
kvc
KVC,即是指 NSKeyValueCoding,一个非正式的 Protocol,它是一种可以直接通过字符串的名字(key)来访问类属性的机制(一种间接访问对象的属性的机制)。
常见的 获取值方法有:
valueForKey://传入NSString属性的名字。valueForKeyPath: //传入NSString属性的路径,xx.xx形式。valueForUndefinedKey //它的默认实现是抛出异常,可以重写这个函数做错误处理。
常见的设置值方法有:
setValue:forKey:setValue:forKeyPath:setValue:forUndefinedKey:setNilValueForKey: //当对非类对象属性设置nil时,调用,默认抛出异常。
一对多关系成员的情况:
mutableArrayValueForKey://有序一对多关系成员 NSArraymutableSetValueForKey://无序一对多关系成员 NSSet
KVC实现步骤:
setValue:forKey的搜索方式:
首先搜索set<key
>:方法
如果成员用@property,@synthsize处理,因为@synthsize告诉编译器自动生成set:格式的setter方法,所以这种情况下会直接搜索到。
注意:这里的是指成员名,而且首字母大写。下同。
上面的setter方法没有找到,如果类方法accessInstanceVariablesDirectly返回YES(注:这是NSKeyValueCodingCatogery中实现的类方法,默认实现为返回YES)。
那么按_<key
>,_is<Key
>,<key
>,is<key
>的顺序搜索成员名。
如果找到设置成员的值,如果没有调用setValue:forUndefinedKey:。
valueForKey:的搜索方式:
1. 首先按get<Key
>、<key
>、is<Key
>的顺序查找getter方法,找到直接调用。如果是bool、int等内建值类型,会做NSNumber的转换。
2. 上面的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这几个方法组合的形式调用。还有一个可选的get:range:方法。
3. 还没查到,那么查找countOf<Key
>、enumeratorOf<Key
>、memberOf<Key
>:格式的方法。
如果这三个方法都找到,那么就返回一个可以响应NSSet所有方法的代理集合(collection proxy object)。发送给这个代理集合(collection proxy object)的NSSet消息方法,就会以countOf<Key
>、enumeratorOf<Key
>、memberOf<Key
>:组合的形式调用。
4. 还是没查到,那么如果类方法accessInstanceVariablesDirectly返回YES,那么按_<key
>,_is<Key
>,<key
>,is<key
>的顺序直接搜索成员名。
5. 再没查到,调用valueForUndefinedKey:
。
- iOS kvc和kvo简介
- iOS KVC和KVO简介
- iOS开发笔记>> KVC 和 KVO 简介
- KVC和KVO简介
- KVO和KVC简介
- ios kvc和kvo
- iOS KVC和KVO
- iOS KVC和KVO
- ios KVC和KVO
- iOS之KVC和KVO
- iOS之KVC和KVO
- ios中的KVC和KVO
- iOS之KVC和KVO
- iOS开发:KVO和KVC
- iOS开发 KVC和KVO
- IOS开发 - KVC 和 KVO
- iOS开发:KVO和KVC
- iOS之KVC和KVO
- openVswitch(OVS)实现之源代码分析之数据结构
- 在eclipse启动tomcat运行一个web程序,报java.lang.OutOfMemoryError: PermGen space
- Ionic2生成网页工作原理
- 打造属于自己的RxBus
- 使用rsync+crontab每天定时备份数据库文件。
- iOS KVC和KVO简介
- java基础学习之反射 十六
- 对HashMap扩容的耗时的测试以及自己的理解
- git操作
- RecycleView实现Gallery画廊效果,中间放大两边缩小
- OC--NSMutableArray可变数组
- EntityFramework 事务处理
- JDBC知识概括(2)
- python pandas.read_csv参数详解