iOS底层第五天 --KVC

作者: 三月木头 | 来源:发表于2020-04-01 17:47 被阅读0次

两个问题作为引导:

1. 通过KVC修改属性是否触发KVO?
2. KVC的赋值、取值过程是什么样的?原理是什么?

KVC是什么:
Key-Value-Coding 也就是可以通过一个key来访问、修改某个属性

常见API:
-setValue:forKeyPath:更强大,可访问当前对象中的对象的属性。
-setValue:forKey:只可访问当前对象的属性
-valueForKeyPath:
-valueForKey:

forKeyPath 的注意一定要先确保属性对象的存在,然后才能set值成功。如下:

       MJPerson *person = [[MJPerson alloc] init];
       person.cat = [[MJCat alloc] init];
       [person setValue:@10 forKeyPath:@"cat.weight"];

1. 通过KVC修改属性是否触发KVO?

答:会触发。
我们先了解KVC的设值过程,假使没用set方法时,其内部属性变化也会触发KVO。原理就是KVC内部实现有实现手动调用KVO方法。
∴ 我们可以猜测[person setValue:@10 forKey:@"age"];的伪代码如下:

[person willChangeValueForKey:@"age"];
person->_age = 10;
[person didChangeValueForKey:@"age"];

2. KVC的赋值、取值过程是什么样的?原理是什么?

setValue:forKey流程是什么,即KVC赋值原理?
先找setKey:方法
再找_setKey:方法
再看AccessInstanceVariableDirectly 如果为NO 则报错。 如果为YES则依次查找_key、_isKey、key、isKey如果这几个都没用则报错。

流程图解释:


KVC设值原理.png

ValueForKey:流程是什么,即KVC取值原理?
先顺序查找 getKey:,key,isKey,_key
如无 则再 accessInstanceVariableDirectly 判断
如果YES 则依次按照 _Key、_isKey、key、isKey进行查找

流程图解释:


KVC取值流程.png

相关文章

  • KVC

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

  • KVC底层实现步骤

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

  • iOS - KVO

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

  • iOS底层第五天 --KVC

    两个问题作为引导: 1. 通过KVC修改属性是否触发KVO? 2. KVC的赋值、取值过程是什么样的?原理是什么?...

  • iOS 底层-KVC底层原理

    KVC是什么? KVC的全称是Key-Value Coding,翻译成中文是 键值编码,键值编码是由NSKeyVa...

  • iOS-底层原理21:KVO底层原理

    上一篇文章iOS-底层原理20:KVC底层原理[https://www.jianshu.com/p/71940e1...

  • iOS知识点,iOS面试题, iOS面试题总结

    推荐 :iOS七年开发之路网络笔记,iOS知识点总结,iOS开发笔记。KVC /KVO的底层原理高质量 iOS 博...

  • iOS底层 -- KVC、KVO

    KVC KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性 常见的...

  • iOS 底层原理 - KVC

    概述 KVC (Key-Value Coding), 也就是键值编码,是利用 NSKeyValueCoding 非...

  • iOS底层之KVC

    在讲KVC之前我们先来了解几个概念 iOS 成员变量,实例变量,属性的区别 成员变量一个类里面所有的变量都是成员变...

网友评论

    本文标题:iOS底层第五天 --KVC

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