美文网首页
iOS KVC底层实现

iOS KVC底层实现

作者: ios小蜗牛 | 来源:发表于2020-07-04 21:03 被阅读0次

参考

https://ke.qq.com/course/314526

KVC

KVC,俗称“键值编码”,可以通过一个key来访问某个属性。

-(void)setValue: (id)value forKeyPath: (NSString *)keyPath
-(void)setValue: (id)value forKey: (NSString *)key;
-(id)valueForKeyPath: (NSString *)keyPath;
-(id)valueForKey: (NSString *)key;

forKey与forKeyPath的区别

forKey只能给当前对象的属性赋值。
forKeyPath可以给对象的属性的属性赋值。
推荐使用forKeyPath。

valueForKey与valueForKeyPath的区别

valueForKey只能获取当前对象属性的值。
valueForKeyPath可以获取当前对象属性的属性的值。
推荐使用valueForKeyPath。

KVC赋值的底层实现

1.按照setKey和_setKey的顺序找set方法赋值。
2.如果找不到set方法,就调用accessinstancevariablesdirectly获取返回值。
3.返回YES,按照_key,_isKey,key,isKey的顺序找成员变量赋值。
4.返回NO,抛出异常Nsunknownkevexception。
5.如果四个成员变量也找不到,就抛出异常Nsunknownkevexception。

image.png

KVC取值的底层实现

1.按照getKey,key,isKey,_key的顺序找get方法取值。
2.如果找不到上述四个get方法,就调用accessinstancevariablesdirectly获取返回值。
3.返回YES,按照_key,_isKey,key,isKey的顺序找成员变量取值。
4.返回NO,抛出异常Nsunknownkevexception。
5.如果四个成员变量也找不到,就抛出异常Nsunknownkevexception。


image.png

补充

1.accessinstancevariablesdirectly方法返回是否允许访问成员变量,默认返回YES。
2.@property修饰的成员变量会自动生成对应的getter和setter方法。
3.通过KVC修改属性会触发KVO,因为KVC内部调用了willChangeValueForKey和didChangeValueForKey方法。
4.本文如有侵犯隐私或其他请联系我,我将在第一时间整改或删除。

相关文章

  • iOS - KVO

    [toc] 参考 KVO KVC 【 iOS--KVO的实现原理与具体应用 】 【 IOS-详解KVO底层实现 】...

  • KVC底层实现步骤

    参考 iOS底层-KVC使用实践以及实现原理 [a setValue:value forKeyPath:@"ico...

  • KVC

    KVC原理剖析 - CocoaChina_让移动开发更简单 iOS开发底层细究:KVC和KVO底层原理 | iOS...

  • iOS KVC底层实现

    参考 https://ke.qq.com/course/314526 KVC KVC,俗称“键值编码”,可以通过一...

  • 可能碰到的iOS笔试面试题(7)--KVO-KVC

    KVC-KVO KVC的底层实现? KVO的底层实现? 什么是KVO和KVC? KVO的缺陷? KVO是一个对象能...

  • 九、KVC

    九、KVC 1.底层实现

  • KVC /KVO的底层原理和使用场景

    1 KVC(KeyValueCoding) 1.1 KVC 常用的方法 1.2 KVC 底层实现原理 1.3 KV...

  • KVC /KVO的底层原理和使用场景

    1 KVC(KeyValueCoding) 1.1 KVC 常用的方法 1.2 KVC 底层实现原理 1.3 KV...

  • iOS底层--KVC实现原理

    KVC 是 Key-Value Coding的简称。是由NSKeyValueCoding非正式协议启用的一种机制...

  • KVC

    主要有 setValue:forKey: 底层实现过程 valueForKey: 底层实现过程通过kvc 修改...

网友评论

      本文标题:iOS KVC底层实现

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