繁体   English   中英

如何删除KVO观察者?

[英]How to remove KVO observer?

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

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

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

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

当用户删除子视图时,它会被释放,并且控制台中出现一个错误,告诉我该视图的frame关键路径的观察者尚未被删除。

当正在观察的子视图未保留对观察者的引用时,如何删除观察者?

反正没有做诸如removeAllObservers事情吗?

我宁愿不必在子视图中创建对观察者的引用,因为它有点违反了KVO的观点(我不妨使用委托设置)。

我不确定为什么要观察框架,但是如果您只是想知道何时删除框架,可以改用NSNotificationCenter。 从那里,您的子视图可以发布到已被更改/删除的通知中心。 然后,您的父视图将看到该通知,并可以根据通知中的内容对其进行处理。 它有点松散地绑定了kvo。

这是一个很好的设置示例。 通过Objective-C中的NSNotificationCenter发送和接收消息?

这样,当超级视图被释放/卸载时,它只需要从通知中心观看该术语中删除自己即可。

无论如何,这是除KVO和代表之外的另一种处理方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM