KVC底层的知识点

valueForKey (总体规则 先找相关方法,再找相关变量)

1.先找相关方法,如果相关方法找不到
2.那么去判断accessInstanceVariableDirectly 是否返回YES
3.1 如果是YES,继续去找相关变量
3.2 如果是NO,直接执行KVC的valueForUndefinedKey (系统抛出一个异常,未定义key)

相关方法:

get,
accessInstanceVariableDirectly
容器方法:
数组 countOf + objectInAtIndex
(NSSet)

相关变量:

_, _is, , is

基本类型 会被转换成 NSNumber

修改时的相关变量:

set, setIs

应用扩展:
多层路径结构用
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先找相关方法,再找相关变量。

你可能感兴趣的:(KVC底层的知识点)