KVC

KVC

KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问属性

用法

1
2
3
4
5
// 常用api
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
- (void)valueForKeyPath:(NSString)keyPath;
- (void)valueForKey:(NSString)key;

原理

赋值过程

  1. 按照setKey_setKey的顺序查找set方法

  2. 如果没有找到set方法,则会判断accessInstanceVariablesDirectly方法的返回值,如果返回值为YES则按照***_key_isKeykeyisKey***的顺序查找成员变量

无论KVC有没有调用set方法(对象内部有没有set方法),KVC都会触发KVO(在KVC内部会调用willChangeValueForKeydidChangeValueForKey,在didChangeValueForKey内部会触发监听方法)。

取值过程

  1. 按照getKeykeyisKey_key的顺序查找get方法
  2. 如果没有找到get方法,则会判断accessInstanceVariablesDirectly方法的返回值,如果返回值为YES,则按照***_key_isKeykeyisKey***的顺序查找成员变量