美文网首页
KVC的本质

KVC的本质

作者: 39Coding | 来源:发表于2020-06-30 13:08 被阅读0次

通过KVC修改属性会触发KVO么?

  • 会触发
    通过-_isKVOA方法判定是否有监听器(_isKVOAKVO生成的NSKVONotifying_XXX的方法)
  • 内部实现:
  1. [per willChangeValueForKey:@"age"];
    保存旧值,标识等会调用didChangeValueForKey
  2. 执行setter方法,没有则直接对成员变量赋值:per->_age = 20;
  3. [per didChangeValueForKey:@"age"];
    通知监听器,XX属性值发生了改变

KVC的赋值和取值过程是怎样的?原理是什么?

  • 赋值 -setValue:forKey:的过程:
  1. 按照优先级为 -setKey:-_setKey:的顺序查找方法
    - 找到:传递参数,调用方法
  2. 找不到,查看 +accessInstanceVariablesDirectly 方法是否为YES
    - NO,不允许:抛出NSUnknownKeyException异常
    - YES,允许,按照优先级为_key_isKeykeyisKey 的顺序查找成员变量
    1) 找到:直接赋值
    2)找不到:抛出NSUnknownKeyException异常
    PS:+accessInstanceVariablesDirectly:是否允许访问成员变量,默认为YES
KVC取值原理.jpg KVC设值原理.jpg

相关文章

  • KVC本质

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

  • KVC本质

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

  • KVC本质

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

  • KVC的本质

    方法: - (void)setValue:(id)value forKeyPath:(NSString *)key...

  • KVC的本质

    通过KVC修改属性会触发KVO么? 会触发通过-_isKVOA方法判定是否有监听器(_isKVOA为KVO生成的N...

  • KVC 的本质

    问?直接修改成员变量会触发KVO么?KVC的赋值和取值过程是怎样的?原理是什么? KVC的全称是Key-Value...

  • 处理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的本质

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