美文网首页iOS基本功iOS面试总结iOS UI开发
iOS原理篇(二): KVC实现原理

iOS原理篇(二): KVC实现原理

作者: 75b9020bd6db | 来源:发表于2019-05-04 15:08 被阅读61次

    KVC实现原理

    • 什么是 KVC
    • KVC基本使用
    • KVC 原理
    • 总结

    一 、 什么是KVC

    KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个key来访问某个属性;

    二 、 KVC基本使用

    常用API

    //设值
    - (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
    - (void)setValue:(id)value forKey:(NSString *)key;
    //取值
    - (id)valueForKeyPath:(NSString *)keyPath;
    - (id)valueForKey:(NSString *)key;
    

    三、KVC原理

    setValue: forKey:原理:

    setValue:forKey:
    调用setValue:forKey:方法,首先会按照setKey_setKey:顺序查找方法:
    1.找到了方法:直接传递参数调用方法设值
    2.没找到方法:会去查看+(BOOL)accessInstanceVariablesDirectly方法的返回值,该方法表示是否直接设置成员变量的值。
    • 返回NO:调用setValue:forUndefinedKey:并抛出异常NSUnkonwnKeyException
    • 返回YES:会按照_key_isKeykeyisKey顺序查找成员变量,如果找到成员变量直接赋值,没有找到同样抛出异常NSUnkonwnKeyException

    valueForKey:原理:

    valueForKey:
    调用valueForKey:方法,首先会按照getKeykeyisKey_key顺序查找方法:
    1.找到了方法:调用方法
    2.没找到方法:同样会去查看+(BOOL)accessInstanceVariablesDirectly方法的返回值:
    • 返回NO:调用valueForUndefinedKey:并抛出异常NSUnkonwnKeyException
    • 返回YES:会按照_key_isKeykeyisKey顺序查找成员变量,如果找到成员变量直接取值,没有找到同样抛出异常NSUnkonwnKeyException

    四、总结:

    通过KVC修改属性会触发KVO吗?
    会触发KVO,因为它内部会调用willChangeValueForKey:didChangeValueForKey:

    相关文章

      网友评论

        本文标题:iOS原理篇(二): KVC实现原理

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