KVC.jpg
valueForKey:
-
给定一个
key作为输入 -
搜索实例方法顺序:
get<Key>,<key>,is<Key>或者_<Key> -
找到: 检查属性值是否是对象指针
是: 返回结果
否:判断是否是所支持的标量类型NSNumber
----是: 将其存储在NSNumber实例中返回
----否:则将其转换为NSValue对象并返回 -
未找到:在实例中搜索下面三个方法
1:countOf<Key>
2:objectIn<Key>Atindex:(与NSArray类定义的原始方法<key>Atindexes:向对应)
3:objectsAtindexes:(与该NSArray方法相对应相匹配的方法)
------如找到其中一个以及其他两个中的至少一个,则创建一个响应所有NSArray方法的集合代理对象将其返回。
------如未找到则再次查找下面三组方法
1:countOf<Key>
2:enumeratorOf<Key>:
3:memberOf<Key>:(对应于NSSet类定义的原始方法)
------如这三个方法都找到了创建一个集合代理对象它响应所有的NSSet方法并返回
------未找到(简单的访问方法或集合访问方法组)查看接受方的类方法+(BOOL)accessInstanceVariablesDisrectly返回的YES NO -
+(BOOL)accessInstanceVariablesDisrectly
YES: 则按照顺序搜索一个实例变量:_<Key>,_is<Key>,<Key>,或is<Key>.
------如找到:直接获取实例变量。
------未找到:调用valueForUndefinedKey:方法,查找完成。默认会崩溃 但是NSObject的子类可能会重写此方法提供特定于键的行为。
NO:则调用valueForUndefinedKey:方法,查找完成。默认会崩溃 但是NSObject的子类可能会重写此方法提供特定于键的行为
setValue:forKey:
- 给定键 和值作为参数输入,尝试在接受调用的对象内部设置一个名为Key的属性 value(或者,对于费对象属性,为value的解包装版本,如面熟的非对象值)
- 按照顺序查找
set<Key>:或_set<Key>:
找到:输入值(或根据需要解包的值)调用它并完成
未找到:查看+(BOOL)accessInstanceVariablesDisrectly返回 YES NO - +(BOOL)accessInstanceVariablesDisrectly
YES:顺序查找_<Key>,_is<Key>,<Key>,或者is<Key>
------找到:直接输入值(或者展开值)设置变量并完成
------未找到:调用 setValue:forUndefinedKey: 默认情况差生异常
NO: 调用 setValue:forUndefinedKey: 默认情况差生异常










网友评论