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的辅助类,将这些方法封装进去,具体封装方法在我们的代码中有。


iOS KVO细节优化_第1张图片

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

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

iOS KVO细节优化_第2张图片

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

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

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


iOS KVO细节优化_第3张图片

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

你可能感兴趣的:(iOS KVO细节优化)