KVC本质

作者: 有毒的程序猿 | 来源:发表于2018-12-20 18:25 被阅读5次
1.赋值操作
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

赋值规则
按照setKey:、_setKey:顺序查找方法,如果找到直接调用方法赋值
- (void)setKey:(id)key {
   _key = key;
}

- (void)_setKey:(id)key {
   _key = key;
}

如果找不到调用accessInstanceVariablesDirectly 获取返回值
是否允许访问成员变量,如果允许
按照_key、_isKey、key、isKey顺序查找成员变量,找到直接赋值

赋值.jpeg
2.取值操作
 - (nullable id)valueForKey:(NSString *)key;
 - (nullable id)valueForKeyPath:(NSString *)keyPath;
 
 取值规则
 按照getKey、key、 isKey、_key顺序查找方法,如果找到直接调用方法赋值

 - (id)getKey {
    return:_key;
 }
 - (id)key {
    return:_key;
 }
 - (id)isKey {
    return:_key;
 }
 - (id)_key {
    return:_key;
 }
 
 如果找不到调用accessInstanceVariablesDirectly 获取返回值
 是否允许访问成员变量,如果允许
 
 按照_key、_isKey、key、isKey顺序查找成员变量,如果找到直接获取值
取值.jpeg
3.用赋值KVC操作是否会触发KVO
- (void)setValue:(nullable id)value forKey:(NSString *)key;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

KVC操作会触发KVO
内部实现大概是
[self willChangeValueForKey:@"age"];  // 将会改变
//...
[self didChangeValueForKey:@"age"];   // 改变

相关文章

  • 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本质

  • swift kvc 构造函数

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

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

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

  • KVC、KVO的本质

    这篇文章介绍KVC、KVO的本质。如果你对KVC、KVO不了解,推荐先查看其用法:KVC和KVO学习笔记[http...

  • KVC/KVO小结

    KVC和KVO的学习 KVC介绍KVC的本质就是键值编码定义:在对象创建完成之后,动态(牵扯到运行时)给对象的属性...

  • Swift 基础之KVC 字典转模型构造函数

    KVC 字典转模型构造函数 以上代码编译就会报错! 原因:KVC 是 OC 特有的,KVC 本质上是在运行时,动态...

  • 探究KVC本质

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

网友评论

      本文标题:KVC本质

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