一、简介
NSKeyValueCoding非正式协议(分类): 规定了允许了App通过key(name)值来间接的访问一个对象的属性和成员变量(不管是私有还是公共的),而不是直接调getter&setter方法或者实例变量
阅读文档:
1. 学习如何在App中使用键值编码
2. 如何使你的类与其他的技术进行交互. KVC是KVO、绑定、CoreData和苹果脚本的基础。
二、文档架构
KVC包含如下文档:
1. 什么是KVC:KVC概述
2. KVC术语:被用于引用对象属性的通用的术语
3. KVC基础:描述使用KVC的基本规则
4. KVC的Getter&Setter方法:被用于引用对象属性的通用的术语
5. 键值校验:如何实现属性校验
6. KVC实现顺序:描述一个类KVC的实现顺序
7. 支持标量和结构体:描述KVC支持的数据类型
8. 集合操作:列举集合操作,并描述它们的使用
9. 访问搜索实现细节:解释如何适当的决定getter&setter方法或者实例变量
10. 描述属性关系:使用元数据定义对象与它们的属性之间的关系
11. 性能方面的考虑:被用于引用对象属性的通用的术语
三、方法体验
*- (nullable id)valueForKeyPath:(NSString )keyPath; // 根据键路径获取值
*- (void)setValue:(nullable id)value forKeyPath:(NSString )keyPath; // 根据键路径设置值
*- (nullable id)valueForKey:(NSString )key; // 根据键获取值
*- (void)setValue:(nullable id)value forKey:(NSString )key; // 根据键获取值
TGPerson *p = [[TGPerson alloc]init];
[p setValue:@"10086" forKeyPath:@"age"]; // setter --> _age --> age
[p setValue:@"tang" forKeyPath:@"stuNum"];
[p setValue:@(1) forKeyPath:@"name"];// 访问真私有属性,注意数据类型的变化。
//[p setValue:@"男" forKeyPath:@"sex"]; // 访问私有属性
NSLog(@"%@",[p valueForKeyPath:@"name"]);
四、问题剖析
1. Value的类型?
任意对象。设置什么类型,值就是什么类型的。
2. KVC的执行原理?
setter&getter - _(key) - key。
3. 明确KVC能够访问所有的属性和成员变量。
五、遗留问题
key与keyPath的区别?下次解答哟,小伙伴们可以看看哟