KVC实现原理
- 什么是 KVC
- KVC基本使用
- KVC 原理
- 总结
一 、 什么是KVC
KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性;
二 、 KVC基本使用
常用API:
//设值
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
//取值
- (id)valueForKeyPath:(NSString *)keyPath;
- (id)valueForKey:(NSString *)key;
三、KVC原理
setValue: forKey:原理:

setValue:forKey:
调用
setValue:forKey:方法,首先会按照setKey、_setKey:顺序查找方法:1.找到了方法:直接传递参数调用方法设值
2.没找到方法:会去查看
+(BOOL)accessInstanceVariablesDirectly方法的返回值,该方法表示是否直接设置成员变量的值。
- 返回
NO:调用setValue:forUndefinedKey:并抛出异常NSUnkonwnKeyException - 返回
YES:会按照_key、_isKey、key、isKey顺序查找成员变量,如果找到成员变量直接赋值,没有找到同样抛出异常NSUnkonwnKeyException
valueForKey:原理:

valueForKey:
调用
valueForKey:方法,首先会按照getKey、key、isKey、_key顺序查找方法:1.找到了方法:调用方法
2.没找到方法:同样会去查看
+(BOOL)accessInstanceVariablesDirectly方法的返回值:
- 返回
NO:调用valueForUndefinedKey:并抛出异常NSUnkonwnKeyException - 返回
YES:会按照_key、_isKey、key、isKey顺序查找成员变量,如果找到成员变量直接取值,没有找到同样抛出异常NSUnkonwnKeyException
四、总结:
通过KVC修改属性会触发KVO吗?
会触发KVO,因为它内部会调用willChangeValueForKey:和didChangeValueForKey: