kvc原理的相关知识

kvc-key value coding键值编码:利用不明确的方法对属性进行存取操作

valueForKey(单级属性取值) 的总体规则:
1.先找相关方法,如
1.1 get方法 get<key>
1.2 key同名方法 key
1.3 容器方法 countOf<key> + objectIn<key>AtIndex
2.如果没找到相关方法,会去判断

+ (BOOL)accessInstanceVariablesDirectly

是否返回YES(默认返回YES), accessInstanceVariablesDirectly如果返回了NO,就可以防止外部通过kvc的方式访问内部的成员变量
3.1 如果返回了NO,则会执行

- (id)valueForUndefinedKey:(NSString *)key

系统抛出异常,未找到key
3.2 如果返回了YES,再去找相关变量(_name,_isName,name,isName 优先级大→小)

setValue (存值) 的总体规则:

  1. 查找相关方法
    1.1 set<key>
    1.2 setIs<key>
  2. 如果没有相关方法,判断accessInstanceVariablesDirectly,如果返回NO,则会抛出异常
- (void)setValue:(id)value forUndefinedKey:(NSString *)key

如果返回了YES,则查找相关变量

valueForKey/valueForKeyPath 隐藏方法:
max,min,sum,count
例如: [array valueForKey:@"@count"];查找数组元素个数
[array valueForKey:@"@max"];查找数组最大的元素

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。