美文网首页iOS基本功iOS面试总结iOS UI开发
iOS原理篇(二): KVC实现原理

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

作者: 75b9020bd6db | 来源:发表于2019-05-04 15:08 被阅读61次

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实现原理

    本文链接:https://www.haomeiwen.com/subject/qxvxoqtx.html