美文网首页
探究KVC本质

探究KVC本质

作者: 我是C | 来源:发表于2018-08-16 16:08 被阅读112次

细致的看了下KVC的东西,记录一下。

KVC:key-value-coding,键值编码。

KVC可以干什么?
利用KVC可以给类的属性、成员变量赋值。

常用方法:
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
- (nullable id)valueForKey:(NSString *)key;
- (nullable id)valueForKeyPath:(NSString *)keyPath;

具体KVC 的用法,就不说了。

一、setValue:forKey 原理

1.先去找setKey,然后再去找_setKey;

2.如果1不满足,那么会调用+ (BOOL)accessInstanceVariablesDirectly(是否允许转发给成员变量,默认返回YES)。如果返回NO,那么执行方法:- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;程序Crash。如果返回YES执行3;

3.查找顺序如下:_key,_isKey,key,isKey,找到赋值,如果找不到执行- (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;程序Crash;

赋值原理图:

image.png

二、valueForKey: 原理
1.按顺序查找:getKey,key,isKey,_key

2.如果1不满足,那么会调用+ (BOOL)accessInstanceVariablesDirectly(是否允许转发给成员变量,默认返回YES)。如果返回NO,那么执行方法:- valueForUndefinedKey:程序Crash。如果返回YES执行3

3.查找顺序如下:_key,_isKey,key,isKey,找到赋值,如果找不到执行valueForUndefinedKey:程序Crash

赋值原理图:


image.png

三、KVC 与 KVO

1.KVC 赋值属性时,是否会触发KVO?
答案是肯定的,可以触发KVO。(触发KVO 的一个重要条件是,属性具有set方法);

2.如果我们直接赋值成员变量,会不会触发KVO?
答案也是肯定的,可以触发KVO。为什么?之前记录KVO的时候主动触发KVO有两个方法:willChangeForKeydidChangeForKey,因为 KVC 内部调用了这两个方法,所以直接赋值成员变量的时候也可以触发KVO

所以KVC 赋值的时候,无论有没有set方法,都可以触发KVO

end,谢谢!

相关文章

  • 探究KVC本质

    细致的看了下KVC的东西,记录一下。 KVC:key-value-coding,键值编码。 KVC可以干什么?利用...

  • KVC底层原理探究本质-GNUstep

    这里是我学习过程中找到的一条探究思路,希望可以开启你的新世纪大门,少走点弯路吧,书籍推荐《Objective-C高...

  • 04 iOS底层原理 - KVC本质探究

    老规矩,还是先来两个面试题: 一,通过KVC修改属性会触发KVO吗?二,KVC的赋值和取值过程是怎样的?原理是什么...

  • KVC原理探究

    KVC iOS在实际开发过程中用KVC的地方也是不少的,但是很少有时间探究里面涵盖的内容,网上的一些文章也纯属是翻...

  • KVC本质

    在设置setValueForKey时,如果对象的属性添加了KVO观察,会调用KVO,即使设置的key没有通过set...

  • KVC本质

    1.赋值操作 2.取值操作 3.用赋值KVC操作是否会触发KVO

  • KVC本质

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

  • 处理Model (二) 使用KVC 方法及其本质

    .h文件 .m文件 KVC本质

  • KVO-KVC的原理探究 - KVC篇

    关于KVC的探究 基本介绍和使用 KVC全称Key-Value Coding 键值编码,可以通过Key来访问某个属...

  • swift kvc 构造函数

    kvc 是oc特有 ,KVC 本质上是在运行时,直接调用程序会崩溃 介绍 kvc 构造函数 kvc构造函数的作用是...

网友评论

      本文标题:探究KVC本质

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