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