【发布时间】:2012-01-16 08:12:13
【问题描述】:
在视图控制器中,我创建了一个子视图数组,可以随时从父视图中删除,因此它们的寿命比视图控制器的寿命短。
在创建它们时,我几乎会这样做:
- 分配/初始化子视图
- 将视图控制器添加为子视图的
frame属性的观察者。 - 将其添加到保留数组中
- 将其添加到视图中
- 释放它
子视图没有对视图控制器的引用。
当用户删除子视图时,它会被释放,并且我在控制台中收到一个错误,告诉我视图的 frame 键路径的观察者尚未删除。
当被观察的子视图没有保持对观察者的引用时,我如何删除观察者?
难道就没有像removeAllObservers这样的事情吗?
我宁愿不必在子视图中创建对观察者的引用,因为它在某种程度上违背了 KVO 的观点(我不妨使用委托设置)。
【问题讨论】:
-
从保留数组中移除 UIView 时不能移除观察者吗?
-
你能告诉观察者也观察子视图本身,并在视图关闭时停止观察吗?我不确定这是否可能 - 如果没有,请参阅 cwieland 的回答。
-
但是如果视图控制器在子视图之前被释放会发生什么?我知道它会通过释放数组并删除子视图来释放子视图,尝试删除已经被删除的观察者是否安全?
标签: iphone objective-c ios key-value-observing