美文网首页
基础知识之KVC原理

基础知识之KVC原理

作者: 仅有的執著 | 来源:发表于2021-05-11 16:34 被阅读0次

在开发中,我们可以通过使用 KVC 的方式来对某个对象的属性进行赋值/取值操作。

经常会用到以下 API:

// 设置值
- (void)setValue:(nullable id)value forKey:(NSString *)key;

- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

// 获取值
- (nullable id)valueForKeyPath:(NSString *)keyPath;

- (nullable id)valueForKey:(NSString *)key;
1、赋值操作

KVC的调用原理:
如果我们给某个类定义一个属性,那么编译器会自动生成getter和setter方法,如果通过KVC给该属性进行赋值操作,默认会调用setter方法进行赋值,但是这不能完全搞清楚KVC是如何工作的。
现在我们定义一个Person类,但是我们并不给Person定义任何的属性,接下来创建person对象,通过KVC的方式给person的age属性进行赋值操作。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        Person *person = [[Person alloc] init];
        
        [person setValue:@(40) forKey:@"age"];
    }
    return 0;
}

接下来是执行顺序,去Person类中查找有没有- (void)setAge:方法,如果有那么就进行赋值操作;如果没有再去查找有没有- (void)_setAge: 方法,如果有就进行赋值的操作,如果以上2个方法都没找到,那么就会调用- (Bool)accessInstanceVariablesDirectly 方法,该方法是询问是否可以直接访问成员变量,返回NO就直接抛出异常未定的key,返回YES(如果不实现该方法默认返回就是YES),那么就直接去成员变量中按顺序查找以下成员变量:_age_isAgeageisAge。如果找到4个成员变量中的1位,那么就进行赋值,否则抛出异常未定义的key。

2、取值操作

KVC 的取值操作也会按照一定的顺序进行操作的。
在取值的过程中,按照-(int)getAge-(int)age-(int)isAge-(int)_age顺序进行,看有没有实现这4个方法中的其中1个,如果有那么调用,如果没有实现上面的4个方法,继续查看 + (BOOL)accessInstanceVariablesDirectly 方法的返回值是否为 YES,如果为NO,直接抛出异常,如果为YES,那么就去按顺序查找Person的成员变量是不是_age,_isAgeageisAge中的一个,如果有4个成员变量中的1个,那么就取他们的值。

相关文章

  • 基础知识之KVC原理

    在开发中,我们可以通过使用 KVC 的方式来对某个对象的属性进行赋值/取值操作。 经常会用到以下 API: 1、赋...

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

    KVC实现原理 什么是 KVC KVC基本使用 KVC 原理 总结 一 、 什么是KVC KVC的全称是Key-V...

  • KVO和KVC的使用及原理解析

    一 KVO基本使用 二 KVO本质原理讲解及代码验证 三 KVC基本使用 四 KVC设值原理 五 KVC取值原理 ...

  • KVC

    一、KVC的原理(赋值取值过程) KVC相关常用的API KVC设置值的原理(setValue: forKey:的...

  • KVC/KVO原理

    KVC/KVO原理 KVC setValue:forKey原理 调用setValue:forKey:方法,会直接寻...

  • 05. KVC的使用,原理,本质

    问题 常用的KVC的API; KVC设置值原理图; KVC获取值原理图; 通过KVC修改属性会触发KVO吗? 答案...

  • iOS 关于KVC的一些总结

    本文参考: KVC官方文档 KVC原理剖析 iOS KVC详解 KVC 简介 KVC全称是Key Value Co...

  • KVC之-(id)valueForKey:(NSString *

    KVC之-(id)valueForKey:(NSString *)key的实现原理与验证 2.-(id)value...

  • KVC,KVO

    KVC , KVO KVC和KVO的区别及应用 KVC/KVO原理 1. KVC键值编码 KVC,即是指NSKey...

  • iOS 关于KVC的一些总结(转)

    原文:iOS 关于KVC的一些总结 本文参考: KVC官方文档 KVC原理剖析 iOS KVC详解 KVC 简介 ...

网友评论

      本文标题:基础知识之KVC原理

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