美文网首页
iOS中的KVO模式

iOS中的KVO模式

作者: JSCocoa | 来源:发表于2015-09-06 12:41 被阅读118次

    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模式

          本文链接:https://www.haomeiwen.com/subject/rqhrcttx.html