美文网首页
通过KVC修改属性会触发KVO吗

通过KVC修改属性会触发KVO吗

作者: buding_ | 来源:发表于2024-03-25 18:42 被阅读0次

    KVC:Key-Value Coding(键值编码),可以通过一个key来访问某个属性

    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能否触发KVO?

    可以, 只要修改成功即会触发KVO;
    因为KVC是会触发willChangeValueForKey:和didChangeValueForKey:

    KVC的赋值过程:
         - (void)setValue:(nullable id)value forKey:(NSString *)key;
         1 按照setKey: _setKey的顺序,查找方法,若找到方法则传递参数调用方法
         2 查看+(BOOL)accessInstanceVariablesDirectly, 指示是否允许直接访问成员变量;
         3 若返回NO,则报错setValue:ForUndefinedKey:
         4 若返回YES,则按照_key,_isKey,key,isKey的顺序,查找成员变量,若找到则直接赋值,否则报错setValue:ForUndefinedKey:
    
    KVC的获值过程:
         - (nullable id)valueForKey:(NSString *)key;
         1 按照getKey、key、isKey、_key的顺序,查找方法,若找到方法则传递参数调用方法
         2 查看+(BOOL)accessInstanceVariablesDirectly, 指示是否允许直接访问成员变量;
         3 若返回NO,则报错valueForUndefinedKey:
         4 若返回YES,则按照key,_isKey,key,isKey的顺序,查找成员变量,若找到则直接返回该值,否则

    相关文章

      网友评论

          本文标题:通过KVC修改属性会触发KVO吗

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