ARC中的内存管理

时间:2012-12-05 11:36:14

标签: objective-c memory-management automatic-ref-counting

我无法理解如何在ARC中释放这些对象,这对我来说仍然存在混淆。

假设我在方法

中创建一个视图控制器或任何其他使用alloc的视图
    -(void) displayView
    {
       RegViewController *sampleView = [[RegViewController alloc] init];
       [sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
       [sampleView setModalPresentationStyle:UIModalPresentationFormSheet];
       [self presentModalViewController:sampleView animated:YES];
    }

是否会释放方法块完成时创建的对象,或者我们应该通过给出引用来显式释放?

4 个答案:

答案 0 :(得分:1)

在这种情况下, sampleView 将在解除模态视图时释放。在这种情况下,人们不需要做任何其他事情。

答案 1 :(得分:0)

视图控制器在块结束时自动释放。但是,意味着它被解除分配 - 它仍然由presentModalViewController:animated:方法保留,并在被解除时释放(并解除分配)。

答案 2 :(得分:0)

ARC代表自动参考计数。 它接管用户维护对象引用计数的责任。 这就是为什么你不能再打电话给[obj retain][obj release]了。 一旦参考计数器达到0,它就会为您释放它。 请记住,它不是垃圾收集器。如果您不小心,有些情况下此机制可能会导致内存泄漏。但总的来说它的效果非常好。

答案 3 :(得分:0)

Does it release the object created when the method block completes or we should explicitly release by giving nil to reference?

答案是

在上面的情况中sampleView保留计数未达到0,因为您将此作为参数传递给self类。一旦所有强引用都被清除,其保留计数将降至0,之后才会释放。

您可以简单地将代码想象为RegViewController *sampleView = [[[RegViewController alloc] init] autorelease];