iOS KVO细节优化

具体代码再代码连接的KVODemo中。

KVO:Model-view-controller,观察者模式,即当 model 对象改变的时候,view应该随之改变以反映model的变化;当用户和控制器交互的时候,model也应该做出相应的改变,以此达到让view和model同步的效果。

基本的使用方法在此不再累述,这里重点讲下优化的事情:

1,KVO模式我们要在Controller里要调用-addObserver:forKeyPath:options:context:,-observeValueForKeyPath:ofObject:change:context:和-removeObserverForKeyPath:这些方法,如果都写在Controller里面会显得很杂乱,这里我们可以封装一个 继承自NSObject的KeyValueObserver的辅助类,将这些方法封装进去,具体封装方法在我们的代码中有。


2,有时我们会有理由不想用KeyValueObserver辅助类。创建另一个对象会有额外的性能开销。如果我们观察很多个键的话,这个开销可能会变得明显。

如果我们在实现一个类的时候把它自己注册为观察者的话:

一个非常重要的点是我们要传入一个这个类唯一的context。我们推荐把以下代码

写在这个类.m文件的顶端,然后我们像这样调用 API 并传入PrivateKVOContext的指针:

然后我们这样写-observeValueForKeyPath:...的方法:


这将确保我们写的子类都是正确的。如此一来,子类和父类都能安全的观察同样的键值而不会冲突。否则我们将会碰到难以 debug 的奇怪行为。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容