iOS中的KVO模式

KVO提供了一种机制,当指定对象的属性的属性被修改后,observer就会接到通知。KVO其实是“观察者”设计模式的一种应用。这种模式有利于两个类间的解耦合,比如Model和Controller间的解耦合。

参考:iOS中KVO模式的解析和应用

文章提到了负责处理业务逻辑的Walker类和负责视图控制的ViewController类,其中一点是ViewController需要将Walker的属性显示出来,并实时更新。例子列举了4种方法,突出了KVO模式的优点。

Swift中使用KVO

文章中提到两点:

1 Swift中使用KVO仅限于NSObject子类

2 要将观测的对象标记为dynamic

原因可以理解,KVO基于KVC和动态派发技术实现,这些都是Objective-C运行时的概念。Swift为了效率,禁用了动态派发。

大多数情况下,我们需要观察的属性不一定有dynamic修饰,文章也给出了解决办法。

Apple用什么方式实现一个对象的KVO

当你要观察一个对象时,一个新的类会被动态创建,这个类继承当前类,并重写了被观察属性的setter方法,setter方法中会调用willChangeValueForKey和didChangeValueForKey。然后通过isa swizzling将isa指针指向新创建的子类,于是对象就变成了新创建子类的实例。

你可能感兴趣的:(iOS中的KVO模式)