美文网首页
重新整理知识第一篇:KVC KVO

重新整理知识第一篇:KVC KVO

作者: BakerCheng | 来源:发表于2016-03-08 19:06 被阅读107次

    这个都是烂到大街上的知识点,但是以前我都是抱着了解面试过了就好的心态,导致现在云里雾里,今天来彻底简单的记下来,能帮助大家理解就更好了,有错误希望大家指正。谢谢

    博客参考:http://www.cnblogs.com/kenshincui/p/3871178.html#kvo

    KVC 键值编码

    我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象。其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方式就是Key Value Coding(简称KVC)。

    这里的解释难懂?首先C#没接触过,做项目很多时候都没用到,所以更难体会它的好用之处了。

    他的这句好的意思就是 [SomeClass setValue:@“我是假设的值” ForKey:@“我是类里面的唯一字符串等同于属性名”];

    通过上述方法就可以直接给类的属性赋值,当然还有复杂的类嵌类,同理使用

    [SomeClass setValue:@“我是假设的值” forKeyPath:@“类里面的子类.子类属性名”];

    的方法,动态直接赋值。嘿嘿!!是不是这样子啊?啦啦啦啦。。。

    (原文博客)

    动态设置:setValue:属性值 forKey:属性名(用于简单路径)、

                     setValue:属性值 forKeyPath:属性路径(用于复合路径,例如Person有一个Account类型的属性,那么person.account就是一个复合属性)

    动态读取:valueForKey:属性名valueForKeyPath:属性名(用于复合路径)

    KVO  键值监听

    (原文博客)我们知道在WPF、Silverlight中都有一种双向绑定机制,如果数据模型修改了之后会立即反映到UI视图上,类似的还有如今比较流行的基于MVVM设计模式的前端框架,例如Knockout.js。其实在ObjC中原生就支持这种机制,它叫做Key Value Observing(简称KVO)。KVO其实是一种观察者模式,利用它可以很容易实现视图组件和数据模型的分离,当数据模型的属性值改变之后作为监听器的视图组件就会被激发,激发时就会回调监听器自身。在ObjC中要实现KVO则必须实现NSKeyValueObServing协议,不过幸运的是NSObject已经实现了该协议,因此几乎所有的ObjC对象都可以使用KVO

    我的解释:就是view是显示数据的,模型是存储数据的,那么通过KVO的方法,当模型的数据改变,直接从我们的KVO的回调里面更新界面。

    下面是方法:

    注册指定Key路径的监听器:addObserver: forKeyPath: options:  context:

    删除指定Key路径的监听器:removeObserver: forKeyPathremoveObserver: forKeyPath: context:

    回调监听:observeValueForKeyPath: ofObject: change: context:

    步骤:1,先注册监听通过addObserver: forKeyPath: options: context:为被监听对象(它通常是数据模型)注册监听器

    2.回调的处理:重写监听器的observeValueForKeyPath: ofObject: change: context:方法

    使用场景:这里最重要啦。学以致用嘛

    推荐博客:http://blog.csdn.net/chenglibin1988/article/details/38259865

    KVC用处,简化代码风格,快速解析封装数据。快速更改数组里面类的名字

    KVO用处,同样简化代码,比用通知好用,缺点是当没有对应的key会报错。嘿嘿

    总结:尽量使用KVC可以大大地减少我们的代码量,当遇到property的时候,可以多想想是否可以KVC来帮助我,是否可以用KVC来重构代码, 当需要加入observer模式时,可以考虑下KVO, 在高性能的observer里面,KVO会给我们很好的帮助

    相关文章

      网友评论

          本文标题:重新整理知识第一篇:KVC KVO

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