KVC

作者: 张_何 | 来源:发表于2019-12-11 17:52 被阅读0次
    • KVC 全称是 Key-Value Coding, 俗称键值编码,可以通过一个 Key 来访问某个属性
    • 常见 API 有:
      1、setValue:(nullable id)value forKey:(NSString *)key
      2、- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
      3、valueForKey:(NSString *)key
      4、valueForKeyPath:(NSString *)keyPath
    setValue: forKey: 原理
    KVC 赋值原理.png
    valueForKey:原理
    KVC 取值原理.png
    • 通过 KVC 修改属性会触发 KVO吗?
      会触发 KVO

    • 通过 KVC 给成员变量赋值会触发 KVO 吗?
      会触发 KVO,通过 KVC给成员变量赋值的时候会触发willChangeValueForKey:didChangeValueForKey:方法,从而触发 KVO.

    • KVC 的赋值和取值过程是怎样的? 原理是什么?
      赋值 : setValue:forKey:方法内部会一次查找setKey:_setKey方法,如果找到了就传递参数调用方法,如果没找到会查看+(void)accessInstanceVariablesDirectly方法的返回值,如果返回值为 NO,则调用 setValue:forUndefinedKey:方法并抛出异常,如果返回值为 YES,则依次查找_key_isKeykeyisKey成员变量,找到了直接赋值,没找到则调用 setValue:forUndefinedKey:方法并抛出异常
      取值: valueForKey:方法内部会依次查找getKeykeyisKey_key 方法,如果找到直接调用方法,如果没找到方法会查看+(void)accessInstanceVariablesDirectly方法的返回值,如果返回值为 NO,则调用valueForUndefinedKey:方法并抛出异常,如果返回值是 YES,则依次查找_key_isKeykeyisKey成员变量,找到了直接取值,没找到则调用valueForUndefinedKey:方法并抛出异常.

    相关文章

      网友评论

          本文标题:KVC

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