美文网首页
iOS---KVC和KVO的底层原理和使用场景

iOS---KVC和KVO的底层原理和使用场景

作者: iOS程序媛ing | 来源:发表于2020-10-12 15:17 被阅读0次
    KVC(key value coding)
    (一)原理

    (1)赋值时首先判断有没有对应的set方法,如果有直接赋值
    (2)如果没有set方法,查看有没有和key一样的成员变量,如果有,直接赋值
    (3)如果没有成员变量,查找有没有对应的属性,如果有,直接赋值
    (4)如果都没有,调用setvalue forUndefinedKey方法
    (二)使用场景
    (1)赋值

    - (void)setValue:(nullable id)value forKey:(NSString *)key;
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
    - (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;
    - (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> *)keyedValues;
    

    (2)取值

    - (id)valueForKey:(NSString *)key;
    - (id)valueForKeyPath:(NSString *)keyPath;
    - (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
    

    (3)字典转模型

    - (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> 
    

    (4)模型转字典

    - (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
    
    KVO

    (一)实现原理
    (1)对象添加observer后,runtime会自动生成一个中间类,让对象的isa指针指向这个中间类(继承自原类),
    (2)中间类会重写set方法,并在调用元set方法的前后添加willChangeValue和didChangeValue方法,继而通知observer
    如果需要手动触发kvo,只需调用willChangeValue和didChangeValue方法即可

    相关文章

      网友评论

          本文标题:iOS---KVC和KVO的底层原理和使用场景

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