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 set<key>
1.2 setIs<key> - 如果没有相关方法,判断accessInstanceVariablesDirectly,如果返回NO,则会抛出异常
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
如果返回了YES,则查找相关变量
valueForKey/valueForKeyPath 隐藏方法:
max,min,sum,count
例如: [array valueForKey:@"@count"];查找数组元素个数
[array valueForKey:@"@max"];查找数组最大的元素
网友评论