KVC
- KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性
- 常见的API有以下几个
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValue:(id)value forKey:(NSString *)key;
- (id)valueForKeyPath:(NSString *)keyPath;
- (id)valueForKey:(NSString *)key;
setValue:forKey:的原理
value:forKey:的原理
面试题
-
通过KVC修改属性会触发KVO么?
- 会触发KVO, 相当于KVC内部会去手动调用
willChangeValueForKey:
和didChangeValueForKey:
方法 - KVC 对属性赋值时候 是会在这个类里边 去查找
_key
isKey
setKey
setIsKey
等方法的 ,最终会调用属性的setter
方法 ,那么如果添加了 KVO 还是会被触发的.相反 设置成员变量_key
由于不会触发setter
方法 ,因此不会去触发KVO
相关的代码 .
- 会触发KVO, 相当于KVC内部会去手动调用
-
KVC的赋值和取值过程是怎样的?原理是什么?
- 把上面两张图的流程大概说一下
- 没找到方法,判断
accessInstanceVariablesDirectly
的返回值,默认是YES
- 如果是
NO
,会调用ValueForUndefineKey并抛出异常 - 如果是
YES
,会按下面的顺序去调用
- 如果是
- 顺序
_key
,_isKey
,key
,isKey