0

假设有一个对象 A

A 对 B 有强引用

B 强烈引用 C

现在,假设最后一个对 A 的引用被删除了。假设 A 在堆栈中并且函数结束。

所以A没了。

在它即将死去的情况下,A 是否通知 B 它已经消失了?B和C也会消失吗?

-(void) foo
{
A * a= [[A alloc]init];
A.b = [[B alloc]init];
A.b.c = [[C alloc]init];
//end of function what happen here? Will a, A.b and A.b.c gone too? How exactly that work?
}
4

3 回答 3

3

A 在堆中(指针在栈中)。而且...是的..如果没有对对象的强引用,它会立即被释放。

ARC 不是垃圾收集器。它只是一个编译时特性。它会自动向对象添加保留、释放和自动释放语句。所以..在ARC模式下,你的dealloc方法会自动调用B上的release。B的dealloc方法调用C上的release。

顺便说一句:您可以实现一个 dealloc 方法。您不能在其中调用 release .. 所以您可以关闭套接字或释放资源....

于 2012-06-19T06:35:24.090 回答
1

您的类在解除分配时需要释放它们的引用。

我不认为 ARC 在这里改变任何东西(除了自动插入发布调用)。

于 2012-06-19T06:27:12.187 回答
1

使用 ARC 并将这些引用标记为强可确保编译器在 dealloc 方法中合成对这些对象的释放调用。

所以,是的,假设没有其他对对象 B 和 C 的引用,它们作为 A 垂死呼吸的一部分被释放:)

于 2012-06-19T06:34:57.813 回答