这个都是烂到大街上的知识点,但是以前我都是抱着了解面试过了就好的心态,导致现在云里雾里,今天来彻底简单的记下来,能帮助大家理解就更好了,有错误希望大家指正。谢谢
博客参考: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: forKeyPath、removeObserver: 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会给我们很好的帮助
网友评论