valueForKey (总体规则 先找相关方法,再找相关变量)
1.先找相关方法,如果相关方法找不到
2.那么去判断accessInstanceVariableDirectly 是否返回YES
3.1 如果是YES,继续去找相关变量
3.2 如果是NO,直接执行KVC的valueForUndefinedKey (系统抛出一个异常,未定义key)
相关方法:
get<Key>,<key>
accessInstanceVariableDirectly
容器方法:
数组 countOf<Key> + objectIn<Key>AtIndex
(NSSet)
相关变量:
_<key>, _is<Key>, <key>, is<Key>
基本类型 会被转换成 NSNumber
修改时的相关变量:
set<Key>, setIs<Key>
应用扩展:
多层路径结构用
setValue:forKeyPath:
valueForKeyPath:
[_textField setValue:[UIColor redColor] forKeyPath:@"placeholderLabel.textColor"];
隐藏方法:
max,min,sum,count
NSMutableArray *arrM = [NSMutableArray array];
Person *p1 = [Person new];
p1.age = 10;
Person *p2 = [Person new];
p2.age = 20;
Person *p3 = [Person new];
p3.age = 30;
[arrM addObject:p1];
[arrM addObject:p2];
[arrM addObject:p3];
NSLog(@"%@",[arrM valueForKeyPath:@"@max.age"]);
NSLog(@"%@",[arrM valueForKeyPath:@"@min.age"]);
NSLog(@"%@",[arrM valueForKeyPath:@"@sum.age"]);
打印:
2018-04-27 02:14:21.658644+0800 OC基础[17959:1063115] 30
2018-04-27 02:14:21.658836+0800 OC基础[17959:1063115] 10
2018-04-27 02:14:21.660473+0800 OC基础[17959:1063115] 60
KVC的封装思想:
运用runtime先找相关方法,再找相关变量。