KVC机制-初体验

一、简介

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. 性能方面的考虑:被用于引用对象属性的通用的术语

三、方法体验

源码地址:https://github.com/TonnyLoves/KVC-

*- (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的区别?下次解答哟,小伙伴们可以看看哟

你可能感兴趣的:(KVC机制-初体验)