gpt4 book ai didi

objective-c - 在 dealloc 中调用自身方法

转载 作者:太空狗 更新时间:2023-10-30 03:36:32 25 4
gpt4 key购买 nike

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

最佳答案

是的,您可以从您的dealloc 方法中调用方法,尽管您谨慎行事是明智的。您应该调用的唯一 方法几乎应该是“拆除”方法,或者在回收对象资源之前帮助清理对象的方法。其中一些清理方法包括:

  • 通过通知中心注销通知
  • 不再是关键值观察者
  • 其他一般清理方法

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

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

长话短说:

是的,它是安全的,只要您对此很聪明。

关于objective-c - 在 dealloc 中调用自身方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com