美文网首页
KVC相关知识(笔记)

KVC相关知识(笔记)

作者: 我家冰箱养企鹅 | 来源:发表于2022-04-13 17:39 被阅读0次

    kvc可以通过key来访问对象的某个属性,它常见的方法有:

    - (nullable id)valueForKey:(NSString *)key;        //直接通过Key来取值
    - (void)setValue:(nullable id)value forKey:(NSString *)key; //通过Key来设值
    - (nullable id)valueForKeyPath:(NSString *)keyPath;     //通过KeyPath来取值
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;  //通过KeyPath来设值
    

    key和keyPath的区别是:如果想要访问的是对象内的其他对象属性的成员,则需要通过keyPath来访问,即

    MYObject *m1 = [MYObject new];
    [m1 setValue:@10 forKey:@"v1"];//v1是int属性
    [m1 setValue:@5 forKeyPath:@"obj.s1"];//obj是对象属性
    

    setValue的执行顺序是:

    1. 按照setKey,_setKey的顺序查找方法,如果能找到就直接调用,否则执行第二步
    2. 查看accessInstanceVariablesDirectly方法的返回值,如果是yes表示可以访问类的成员,如果是no则调用setValue:forUndefinedKey抛出异常,默认是yes。
    3. 按照_key,_isKey,key,isKey的顺序依照查找,如果找到了就直接赋值。
      通过KVC的方式修改属性或成员变量的值,不管有没有setter方法,都会触发kvo,它是通过willChangeVaueForKey,didChangeKeyForKey来手动触发的。

    valueForKey的执行顺序:
    按照getKey, key, isKey, _key的顺序查找方法,如果能找到则返回,否则执行和setKey同样的步骤。

    相关文章

      网友评论

          本文标题:KVC相关知识(笔记)

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