iOS KVO细节优化

2017-01-14 10:45:51来源:http://www.jianshu.com/p/484cfa03d01e作者:Baoy的简书人点击

具体代码再代码连接的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 的奇怪行为。




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台