假设我有2个类,A类和B类。通过组合,A类有一个B类实例。换句话说,A类是创建B类实例的类。
如果我在我的对象的最终版本中是一种类A,那么将首先执行B类的dealloc方法吗?总是这样吗?是否会出现A类dealloc将在B类之前执行的情况?
我试图理解执行类的dealloc方法的顺序。
(这是在ARC)
答案 0 :(得分:2)
如果您删除(或实际上删除最后一个强引用)A类的实例,它将被取消分配。在ARC下,作为部分释放,它将删除其对B类实例的强引用,如果没有其他任何强引用,则将对其进行解除分配。
因此,首先调用A的dealloc方法。
如果你依赖这个操作顺序做什么,这是一个非常糟糕的代码味道。
答案 1 :(得分:1)
当对给定对象的最后一次强引用消失时,它的-dealloc
将会运行,它将删除对其实例变量的所有强引用。如果那些是那些对象的最后一个强引用,那么该过程将重复它们。
换句话说,如果A拥有B,那么A将在B之前解除分配。