美文网首页
关于KVC分析总结笔记

关于KVC分析总结笔记

作者: GY1994 | 来源:发表于2019-03-03 21:49 被阅读0次

    KVC基础理解

    KVC全称Key-Value-Coding俗称键值编码,可以通过一个key访问某个属性
    API:

    - (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;
    

    通过如下示例使用:

    GYPerson *person = [[GYPerson alloc] init];
    [person setValue:@(2) forKey:@"age"];
    NSLog(@"%ld", (long)person.age);
    

    KVC :setValue:forKey:的原理

    图1.jpg
    根据示例图,我们可以观察到,如果存在setValue:_setValue,就正常传递参数,设置值。
    一、同时存在setValue:_setValue,优先调用setAge:(NSInteger)age;
    图2.jpg
    二、不存在setValue,则调用_setAge:(NSInteger)age;
    图3.jpg
    三、如果不允许直接访问成员变量,直接报错
    图4.jpg
    四、默认允许访问成员变量,不存在setValue:_setValue方法时,他会按顺序查找_key,_isKey,key,isKey。我们在GYPerson.h中定义相关成员变量。
    @interface GYPerson : NSObject {
        NSInteger _age;
        NSInteger _isAge;
        NSInteger age;
        NSInteger isAge;
    }
    @end
    
    图5.jpg
    优先向_key赋值,其它以此类推可验证。

    valueForKey:原理

    会触发

    图6.jpg
    验证可与setValue:forKey:的原理一致

    通过KVC修改属性是否会触发KVO

    图7.jpg

    相关文章

      网友评论

          本文标题:关于KVC分析总结笔记

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