2011-12-14 95 views
1

我有一个NSMutableArray属性声明为(非原子,保留)称为类别。在dealloc中,我释放了该变量的内存。最初,在viewDidLoad中,我分配了该数组,并调用另一个方法来用伪数据填充数据。基本上保留一个自动释放变量,我在哪里释放它?

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

这是工作。

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

categories = [datamanager GetCategories]; 

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

如果是这样,我需要删除viewDidLoad中的alloc/init,因为这将是一个内存泄漏的权利?

谢谢,只是试图确保我正确理解记忆管理。

回答

4

我认为你是在正确的轨道上。如果你从得到的方法返回一个自动发布的对象然后你想保留那个对象。所以,你可以改变你的分配上面下面的任一:

// 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是不必要的。

+3

我会说最好的做法是使用`self.`语法。你已经声明了一个Obj-C 2.0属性,你可以使用它。 – darvids0n 2011-12-14 00:21:01