2011-06-22 39 views

回答

8

當對象準備好被釋放時(即,當對象的保留計數變爲0時)使用'dealloc'。 viewDidUnload在視圖被卸載時被調用,但它可能不會立即被釋放,因爲UIViewController的引用仍然被一些其他對象存儲。

我個人的偏好是,對於'init'創建的ojbects,它們被'dealloc'釋放,對於'viewDidLoad'創建的對象,它們被'viewDidUnload'釋放。

+2

不是一個「偏好」,而是一種必然。請記住,'-viewDidLoad'可能被多次調用,儘管總會有一個'-viewDidUnload'調用。但是,在'-viewDidLoad'中創建的內容也應該在'-dealloc'中清理,因爲在解除分配控制器之前可能不會調用'-viewDidUnload'。 –

4

作爲-viewDidUnload的文件說:

它在低存儲器稱爲 條件時 需要釋放其視圖和與該視圖相關聯的 釋放內存任何 對象視圖控制器。由於視圖 控制器經常存儲對 視圖和其他視圖相關對象的引用,因此您應該使用此方法以 放棄這些對象的所有權 ,以便可以將它們的內存回收到 。您應該只爲 對象執行此操作,您可以稍後在您的viewDidLoad 方法或 應用程序的其他部分輕鬆地重新創建 對象。您不應該使用此方法釋放用戶數據或任何不能輕易重新創建的 其他信息。

通常,使用的出口, 這是一個變量或屬性 包括IBOutlet中的關鍵字和是 使用界面生成器配置的圖控制器存儲 引用對象。 A 視圖控制器也可以存儲 指向其以編程方式創建 的對象的指針,例如在 viewDidLoad方法中。 放棄任何對象 (包括網點中的那些)的所有權的首選方式是使用 對應的訪問器方法來將對象的值設置爲零。 但是,如果您沒有給定對象的 訪問器方法,則可能必須顯式釋放對象 。

沒有提到-viewDidUnload會打電話給-dealloc,你不應該依賴它。