2011-12-14 91 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