美文网首页iOS归纳
OC底层学习笔记(4)-KVC

OC底层学习笔记(4)-KVC

作者: 打瞌睡de小男孩 | 来源:发表于2019-12-12 09:40 被阅读0次

    注:文章为自己学习李明杰老师的OC底层视频做的随手笔记
    KVC的全程是key-value-coding,俗称"键值编码",可以通过一个key来访问某个属性

    常见API

    setValue:(nullable id) forKey:(nonnull NSString *)
    setValue:(nullable id) forKeyPath:(nonnull NSString *)
    valueForKey:(nonnull NSString *)
    valueForKeyPath:(nonnull NSString *)
    

    setValue:(nullable id) forKey:(nonnull NSString *)和setValue:(nullable id) forKeyPath:(nonnull NSString *)的区别
    demo:
    新建一个person类和cat类,person有属性age和cat,cat类有个weight的属性

    image5.png

    那么.再给person的age属性赋值的时候,除了点语法外,这两个方法都可用,没有区别,但是在给属性cat下的weight赋值,就只能用forKeyPath了,他俩的区别就是一个是寻找路径,一个是具体的属性名称,简单来说,keypath的功能更强大
    取值方法同理

     NSLog(@"%@",[p valueForKeyPath:@"age"]);
       NSLog(@"%@",[p valueForKeyPath:@"cat.weight"]);
    

    Q:通过KVC赋值,会不会触发KVO?

    A:会

    解析:
    setValueForKey的原理:
    重写age的set方法,发现用kvc赋值,会走age的set方法

    image6.png

    valueForKey,原理其实还是调用属性的get方法

    image7.png

    相对于KVO,KVC的东西不是特别多

    相关文章

      网友评论

        本文标题:OC底层学习笔记(4)-KVC

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