保留一个自动释放的变量,我在哪里发布它?

时间:2011-12-14 00:07:32

标签: iphone memory-management

我有一个NSMutableArray属性声明为(nonatomic,retain),名为Categories。在dealloc中,我释放了该变量的内存。最初,在viewDidLoad中,我分配了该数组并调用了另一个用虚拟数据填充该数据的方法。基本上

[categories addObject:someObject1];
[categories addObject:someObject2];
....

这很有用。

然后我从同事那里得到了一个与该模型交谈并返回自动释放数组的方法的真实数据。我使用该方法后得到了EXC_BAD_ACCESS。

categories = [datamanager GetCategories];

现在是因为我没有保留从datamanager GetCategories方法返回的自动释放数组?

如果是这样,我需要在viewDidLoad中删除alloc / init,因为那会是内存泄漏吗?

谢谢,只是想确保我正确理解内存管理。

1 个答案:

答案 0 :(得分:4)

我认为你走在正确的轨道上。如果您从返回自动释放对象的方法中获得categories,那么您希望保留该对象。因此,您可以将上面的作业更改为以下任一项:

// use the synthesized setter's retain
self.categories = [datamanager GetCategories];

// or explicitly retain the object (which clearly indicates the code's intention)
categories = [[datamanager GetCategories] retain];

viewDidLoad中的alloc / init是不必要的。