如何删除KVO观察者?

时间:2011-12-08 22:33:52

标签: iphone objective-c ios key-value-observing

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

创建它们时,我做了很多:

  • Alloc / init子视图
  • 将视图控制器添加为子视图的frame属性的观察者。
  • 将其添加到保留的数组
  • 将其添加到视图
  • 释放它

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

当用户删除子视图时,它会被取消分配,并且我在控制台中收到错误,告诉我视图的frame密钥路径的观察者尚未被删除。

当观察到的子视图没有保留对观察者的引用时,如何删除观察者?

无论如何都不能做removeAllObservers之类的事情吗?

我宁愿不必在子视图中创建对观察者的引用,因为它在某种程度上违背了KVO(我不妨使用委托设置)。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么要观察这个框架但是如果你只是想知道什么时候它被删除你可以改为使用NSNotificationCenter。从那里,您的子视图可以向通知中心发布已更改/删除的子视图。然后,您的父视图将看到该通知,并可以根据通知中的内容对其执行某些操作。它有点像一个更松散的kvo。

这是设置它的一个很好的例子。 Send and receive messages through NSNotificationCenter in Objective-C?

通过这种方式,超级视图只需在发布/卸载时就不会在通知中心中查看该术语。

无论如何,除了KVO和代表之外,它是另一种接近它的方式。