首先调用哪种dealloc方法?

时间:2014-01-16 08:02:10

标签: ios objective-c automatic-ref-counting dealloc code-design

假设我有2个类,A类和B类。通过组合,A类有一个B类实例。换句话说,A类是创建B类实例的类。

如果我在我的对象的最终版本中是一种类A,那么将首先执行B类的dealloc方法吗?总是这样吗?是否会出现A类dealloc将在B类之前执行的情况?

我试图理解执行类的dealloc方法的顺序。

(这是在ARC)

2 个答案:

答案 0 :(得分:2)

如果您删除(或实际上删除最后一个强引用)A类的实例,它将被取消分配。在ARC下,作为部分释放,它将删除其对B类实例的强引用,如果没有其他任何强引用,则将对其进行解除分配。

因此,首先调用A的dealloc方法。

如果你依赖这个操作顺序什么,这是一个非常糟糕的代码味道。

答案 1 :(得分:1)

当对给定对象的最后一次强引用消失时,它的-dealloc将会运行,它将删除对其实例变量的所有强引用。如果那些是那些对象的最后一个强引用,那么该过程将重复它们。

换句话说,如果A拥有B,那么A将在B之前解除分配。

相关问题