1

我不明白这些对象是如何在 ARC 中释放的,这对我来说仍然是一个困惑。

假设我在方法中使用 alloc 创建了一个视图控制器或任何其他控制器

    -(void) displayView
    {
       RegViewController *sampleView = [[RegViewController alloc] init];
       [sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
       [sampleView setModalPresentationStyle:UIModalPresentationFormSheet];
       [self presentModalViewController:sampleView animated:YES];
    }

它是释放方法块完成时创建的对象,还是我们应该通过给 nil 引用来显式释放?

4

4 回答 4

1

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

于 2012-12-05T11:42:47.030 回答
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];

于 2012-12-05T13:35:53.323 回答
0

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

于 2012-12-05T11:40:47.307 回答
0

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

于 2012-12-05T11:42:18.243 回答