在dealloc中调用自我的方法

Don*_*Don 7 objective-c dealloc

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

Dav*_*ong 11

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

  • 通过通知中心取消注册通知
  • 把自己当作一个关键价值观察者
  • 其他一般清理方法

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

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

TL; DR:

是的,只要你对它很聪明,它就是安全的.