如何移除KVO观测器



在视图控制器中,我创建了一个子视图数组,这些子视图可以随时从父视图中删除,因此它们的寿命比视图控制器的寿命短。

创建它们时,我几乎是这样做的:

  • 分配/初始化子视图
  • 添加视图控制器作为子视图frame属性的观察者。
  • 将其添加到保留数组
  • 添加到视图
  • 释放它

子视图没有对视图控制器的引用。

当用户删除子视图时,它被释放,并且我在控制台中得到一个错误,告诉我视图的frame键路径的观察者没有被删除。

当被观察的子视图不保留对观察者的引用时,我如何删除观察者?

难道没有像removeAllObservers这样的东西吗?

我不希望在子视图中创建对观察者的引用,因为它在某种程度上违背了KVO的意义(我还不如使用委托设置)。

我不确定你为什么要观察框架,但如果你只是想知道它何时被删除,你可以使用NSNotificationCenter。从那里,你的子视图可以发布到通知中心,它已被更改/删除。你的父视图会看到那个通知并能对它做一些事情,这取决于通知中的内容。在某种程度上,它是一个更松散的kvo。

这里有一个关于设置它的很好的例子。在Objective-C中通过NSNotificationCenter发送和接收消息?

这样,当父视图被释放/卸载时,它只需要将自己从通知中心的监视项中移除。

无论如何,这是除了KVO和委托之外的另一种方法。

最新更新