ARC是否以级联方式释放内存?

时间:2012-06-19 06:24:07

标签: objective-c automatic-ref-counting

说有一个对象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?
}

3 个答案:

答案 0 :(得分:3)

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

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

BTW:您可以实现dealloc方法。你不能在其中调用发布..所以你可以关闭套接字或免费资源....

答案 1 :(得分:1)

您的课程需要在取消分配时释放他们的参考资料。

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

答案 2 :(得分:1)

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

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