iPhone上的“释放”意味着什么?

时间:2010-07-22 10:20:47

标签: objective-c

我想问一个关于iPhone应用程序的愚蠢问题。我是iPhone应用程序的绿色。我在Apple网站上阅读了以下代码。

    MyViewController *aViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
    [self setMyViewController:aViewController];
    [aViewController release];

我有一个问题,第3行中“释放”的含义是什么?

它是否显示内存清晰?或程序控制该对象?或其他含义。非常感谢你。

2 个答案:

答案 0 :(得分:5)

当你alloc某事时,你得到的对象的保留计数为1 - 这意味着此对象当前正由某人使用,因此不应将其从内存中删除。如果在对象上调用retain,它将增加保留计数,这意味着该对象被两件事物使用。如果保留计数达到0,则意味着该对象不再被任何东西使用,并且可以从内存中删除它。您可以通过调用对象上的release来减少对象的保留计数。

在您的示例中,aViewControlleralloc'd,第1行后的保留计数为+1。

然后将其设置为第2行中的视图控制器。此方法用于获取对象的所有权,因此retain将其用于自己的用途。

第3行,我们不希望与视图控制器有任何关系,所以我们release持有它。保留计数减少一个 - 现在由新的所有者在它完成时释放它。

您可能会发现阅读this tutrial

的内存管理部分会很有帮助

答案 1 :(得分:2)

每当您致电alloc时,您拥有对返回的对象的引用,您必须致电release以表明您不再打算使用该引用。

在上面的例子中,您已经分配了一个新的视图控制器并将其分配给您的类的属性。假设使用retain选项声明属性,该属性将通过调用retain获取对视图控制器的自己的引用。所以现在有两个活跃的引用。该属性最终将释放其引用(在分配不同的视图控制器时,或者在您的类完成时)。但是如果你不自己调用release,那么将保留一个引用,并且永远不会释放视图控制器。

简而言之,您必须将每个alloc与一个版本匹配,否则会发生泄漏。

相关问题