我在viewDidLoad中分配了一個NSArray(首先是好的做法,就像它是不錯的實踐?)但是我在哪裏釋放它?在ViewDidUnload中,dealloc或didRecieveMemoryWarning?內存管理和viewDidLoad(iphone,objective-c)
(也應該我消息時,它釋放,或將其設置爲無,或空數組或一個組合?)
我在viewDidLoad中分配了一個NSArray(首先是好的做法,就像它是不錯的實踐?)但是我在哪裏釋放它?在ViewDidUnload中,dealloc或didRecieveMemoryWarning?內存管理和viewDidLoad(iphone,objective-c)
(也應該我消息時,它釋放,或將其設置爲無,或空數組或一個組合?)
可以在viewDidLoad中分配,它將呼叫釋放,在每個項目時,它是dealloced (當你添加它時它會保留,所以如果你需要的話確保你釋放)。
如果你不需要它,你應該儘快釋放它。如果你想堅持下去(因爲它是一個緩存),那麼你可以釋放所有三種情況,但不要多次釋放它。
要釋放的對象,發送釋放消息:
[myObject release];
詳情請參閱Properties in dealloc: release then set to nil? or simply release。
沒有必要清空數組。當數組上的引用計數降到零時,它將調用其所有對象上的[object release]。
您應該將NSArray分配給self
的保留屬性,並(自動)將其釋放到viewDidLoad中。然後釋放它在dealloc
。在這個設置中,當viewDidLoad被調用時,它釋放「當前」NSArray,如果有的話。
但是,如果可能的話,您似乎最好在其中一個init
函數中分配NSArray。
但是,如果我autorelease並釋放它在dealloc中,不會釋放它兩次?並因爲試圖釋放不存在的對象而導致錯誤。 – 2010-08-06 08:13:07
是的,但是您希望它發佈兩次:第一次是因爲您從開始時得到的保留數爲1,第二次是因爲您的對象掛起了它,因爲您已將它分配給保留屬性。即通過執行'self.prop = [obj autorelease]'你可以有效地將所有權從函數轉移到對象。 – mvds 2010-08-06 09:11:46
我知道如何釋放一個對象。我在問哪裏。 – 2010-08-06 08:11:31
我回答了我們問題的第二部分,關於釋放對象的正確方法是什麼([obj release],self.obj = nil,...)。 mvds已經準確地回答了第一部分。 – 2010-08-06 15:51:08