2010-08-05 90 views
1

我在viewDidLoad中分配了一個NSArray(首先是好的做法,就像它是不錯的實踐?)但是我在哪裏釋放它?在ViewDidUnload中,dealloc或didRecieveMemoryWarning?內存管理和viewDidLoad(iphone,objective-c)

(也應該我消息時,它釋放,或將其設置爲無,或空數組或一個組合?)

回答

0

可以在viewDidLoad中分配,它將呼叫釋放,在每個項目時,它是dealloced (當你添加它時它會保留,所以如果你需要的話確保你釋放)。

如果你不需要它,你應該儘快釋放它。如果你想堅持下去(因爲它是一個緩存),那麼你可以釋放所有三種情況,但不要多次釋放它。

0

要釋放的對象,發送釋放消息:

[myObject release]; 

詳情請參閱Properties in dealloc: release then set to nil? or simply release

沒有必要清空數組。當數組上的引用計數降到零時,它將調用其所有對象上的[object release]。

+0

我知道如何釋放一個對象。我在問哪裏。 – 2010-08-06 08:11:31

+0

我回答了我們問題的第二部分,關於釋放對象的正確方法是什麼([obj release],self.obj = nil,...)。 mvds已經準確地回答了第一部分。 – 2010-08-06 15:51:08

1

您應該將NSArray分配給self的保留屬性,並(自動)將其釋放到viewDidLoad中。然後釋放它在dealloc。在這個設置中,當viewDidLoad被調用時,它釋放「當前」NSArray,如果有的話。

但是,如果可能的話,您似乎最好在其中一個init函數中分配NSArray。

+0

但是,如果我autorelease並釋放它在dealloc中,不會釋放它兩次?並因爲試圖釋放不存在的對象而導致錯誤。 – 2010-08-06 08:13:07

+0

是的,但是您希望它發佈兩次:第一次是因爲您從開始時得到的保留數爲1,第二次是因爲您的對象掛起了它,因爲您已將它分配給保留屬性。即通過執行'self.prop = [obj autorelease]'你可以有效地將所有權從函數轉移到對象。 – mvds 2010-08-06 09:11:46