2011-06-01 56 views

回答

0

是的,如果發生內存警告,它可能會被卸載。

至於viewDidUnload和dealloc之間的區別 - 當您的視圖被卸載時,前者會被調用,通常是因爲內存不足。當對象的保留計數達到零時(即,它完全從內存釋放),調用後者。

0

UIViewController s永遠不會被卸載。他們擁有的UIView可以。

所以,如果你的問題是如果一個UIView可以卸載,雖然它的控制器已經被推到導航控制器上,答案是肯定的。只有當前顯示的UIView不會被卸載(如果你不阻止卸載機制的工作)。

此外,viewDidUnload是一個消息,當它所管理的視圖已被卸載時,該消息被髮送到UIViewController,這通常與釋放視圖不同。實際上,當視圖實際上被釋放時,它肯定會被卸載,但不會發送viewDidUnload

0

已被壓入導航控制器堆棧但尚未彈出的UIViewController不會被解除分配。但是,它的view屬性可能會被卸載 - 特別是,如果出現內存不足的情況,並且該視圖控制器的視圖當前不可見(有些內容正在覆蓋它,如模式對話框或其他VC上的視圖) ),該視圖可能會被系統卸載。

viewDidUnload對於該方法的用途而言是一個糟糕的名稱。當低內存條件導致視圖被卸載時它被調用 - 即它不是與viewDidLoad「相反」的方法,我想你可能會合理地期望這種方法。

更多信息:

When should I release objects in -(void)viewDidUnload rather than in -dealloc?

1

viewDidUnload:在低內存條件時調用視圖控制器需要釋放其視圖與視圖以釋放內存相關聯的任何對象。 More

dealloc:取消分配接收方佔用的內存,通過釋放NSObject協議方法間接調用對象的dealloc方法。 More

+0

在pointDidUnload被調用的時候,視圖已經被卸載 - 這是爲你完成的。它仍然取決於您的UIViewController的子類,以便根據需要發佈您管理的任何網點。 – occulus 2011-06-01 16:31:31

+0

@occulus:plz閱讀viewDidUnload的apple文檔。 – Jhaliya 2011-06-01 16:34:12

0

同樣重要的是viewDidLoad將在viewDidUnload之後再次被調用。如果您在viewDidLoad中執行設置,則應該以第二次調用它不會導致內存泄漏的方式處理它。

要麼在viewDidUnload(禮貌,如果它們是內存密集型)中撕下所有東西,或者在設置它們時檢查它們的存在並且不要這樣做兩次。 (而且,當然,完全之前或dealloc方法中撕裂下來。)

您是保證之前deallocviewDidUnload將被調用。