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:
方法,首先会按照setKey
、_setKey:
顺序查找方法:1.找到了方法:直接传递参数调用方法设值
2.没找到方法:会去查看
+(BOOL)accessInstanceVariablesDirectly
方法的返回值,该方法表示是否直接设置成员变量的值。
- 返回
NO
:调用setValue:forUndefinedKey:
并抛出异常NSUnkonwnKeyException
- 返回
YES
:会按照_key
、_isKey
、key
、isKey
顺序查找成员变量,如果找到成员变量直接赋值,没有找到同样抛出异常NSUnkonwnKeyException
valueForKey:
原理:
调用
valueForKey:
方法,首先会按照getKey
、key
、isKey
、_key
顺序查找方法:1.找到了方法:调用方法
2.没找到方法:同样会去查看
+(BOOL)accessInstanceVariablesDirectly
方法的返回值:
- 返回
NO
:调用valueForUndefinedKey:
并抛出异常NSUnkonwnKeyException
- 返回
YES
:会按照_key
、_isKey
、key
、isKey
顺序查找成员变量,如果找到成员变量直接取值,没有找到同样抛出异常NSUnkonwnKeyException
四、总结:
通过KVC
修改属性会触发KVO
吗?
会触发KVO
,因为它内部会调用willChangeValueForKey:
和didChangeValueForKey:
网友评论