KVC底层的知识点

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先找相关方法,再找相关变量。

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

推荐阅读更多精彩内容

  • KVC(Key-valuecoding)键值编码,单看这个名字可能不太好理解。其实翻译一下就很简单了,就是指iOS...
    榕樹頭阅读 727评论 0 2
  • 源码加翻译 #import <Foundation/NSArray.h> #import <Foundation/...
    CAICAI0阅读 1,182评论 0 50
  • KVC(Key-value coding)键值编码,iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,...
    CALayer_Sai阅读 2,552评论 0 4
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,661评论 8 265
  • 南笙公子 后来,我见过许多人都和你有相似的背影,有和你相似的眉眼,他们说话的感觉很像你,微笑的样子像你,甚至连走路...
    绅士君小姐阅读 407评论 0 0