在dealloc中调用自我的方法

时间:2011-02-23 17:36:11

标签: objective-c dealloc

我有一个对象字典,需要在发布之前进行清理。我有一个方法可以为整个字典执行此操作。在我用-dealloc方法发布字典之前,我想做同样的事情。但是,我不确定在释放期间对象的状态。例如,在C#或Java中,我永远不会在最终确定的对象上调用方法,但我不确定这是否适用于Objective C和deallocation。在解除分配期间调用self上的清理方法是否可以接受,或者我应该在-dealloc中复制该功能吗?

1 个答案:

答案 0 :(得分:11)

是的,您可以从dealloc方法中调用方法,但要谨慎谨慎。您应该调用的 only 方法应该是“拆除”方法,或者有助于在回收资源之前清理对象的方法。其中一些清理方法包括:

  • 通过通知中心取消注册通知
  • 将自己移除为键值观察者
  • 其他一般清理方法

但请注意,在每种方法中,您的对象都处于不一致状态。它可能被部分解除分配(某些ivars可能/将无效),因此您永远不会依赖于特定的对象状态。这些方法应用于继续解构对象状态。

这是我们不鼓励在setFoo:中使用属性设置器(dealloc方法)的根本原因:另一个对象可能被注册为观察者,并且使用该属性将触发KVO通知,如果观察者期望对象具有有效状态,那么他们可能会失去运气,事情会很快爆发。

TL; DR:

是的,这是安全的,只要你对它很聪明。