在视图控制器中,我创建了一个子视图数组,它可以随时从父视图中删除,所以它们的寿命比视图控制器的寿命短。如何移除KVO观察者?
在创建他们我做很多这样的:
- 分配/初始化子视图
- 添加视图控制器作为子视图的
frame
财产的观察员。 - 其添加到保留阵列
- 它添加到视图
- 释放它
的子视图不必视图控制器的引用。
当用户删除子视图时,它将被取消分配,并且在控制台中出现错误,告诉我视图的frame
关键路径的观察者未被删除。
当被观察的子视图不保留对观察者的引用时,如何删除观察者?
反正有没有办法像removeAllObservers
这样?
我不希望在子视图中创建对观察者的引用,因为它有点失败了KVO(我可能会使用委托设置)。
当你从保留的数组中移除UIView时,你不能移除观察者吗? –
您是否可以告诉观察者也观察子视图本身,并在视图关闭时停止观察?我不确定这是否可能 - 如果没有,请参阅cwieland的答案。 – Daniel
但是,如果视图控制器在子视图之前解除分配,会发生什么?我知道它会通过释放数组并删除子视图来释放子视图,尝试删除已移除的观察者是否安全? –