iOS原理篇(二): KVC实现原理

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_isKeykeyisKey顺序查找成员变量,如果找到成员变量直接赋值,没有找到同样抛出异常NSUnkonwnKeyException

valueForKey:原理:

valueForKey:

调用valueForKey:方法,首先会按照getKeykeyisKey_key顺序查找方法:
1.找到了方法:调用方法
2.没找到方法:同样会去查看+(BOOL)accessInstanceVariablesDirectly方法的返回值:

  • 返回NO:调用valueForUndefinedKey:并抛出异常NSUnkonwnKeyException
  • 返回YES:会按照_key_isKeykeyisKey顺序查找成员变量,如果找到成员变量直接取值,没有找到同样抛出异常NSUnkonwnKeyException

四、总结:

通过KVC修改属性会触发KVO吗?
会触发KVO,因为它内部会调用willChangeValueForKey:didChangeValueForKey:

你可能感兴趣的:(iOS原理篇(二): KVC实现原理)