我設置了一個詳細視圖,是否有幾個Nib文件可以加載,具體取決於在根視圖控制器的表中選擇了哪些項目。在iPad DetailView的情況下,viewDidUnload沒有被調用
我發現的是,對於Nibs的類,viewDidUnload
永遠不會被調用,而viewWillDisappear
被調用,dealloc當然也被稱爲。
有人知道這是爲什麼嗎?
謝謝。
我設置了一個詳細視圖,是否有幾個Nib文件可以加載,具體取決於在根視圖控制器的表中選擇了哪些項目。在iPad DetailView的情況下,viewDidUnload沒有被調用
我發現的是,對於Nibs的類,viewDidUnload
永遠不會被調用,而viewWillDisappear
被調用,dealloc當然也被稱爲。
有人知道這是爲什麼嗎?
謝謝。
我認爲viewDidUnload
通常不會在視圖從視圖中消失時調用。原因是因爲dealloc
通常會處理所有內存轉儲,因此不需要先撥打viewDidUnload
。
我認爲一個例子有助於識別何時調用viewDidUnload
。假設你有一個UINavigationController
,並且你推動了一個新的視圖。這種新的觀點在內存使用上非常沉重,所以該應用試圖支撐一些資源。它通過查看是否加載了當前不在屏幕上的視圖來完成此操作。如果是這樣,它會調用viewDidUnload
,理想情況下,您將刪除您在loadView或viewDidLoad
中構建的內容。然後,當您回到該視圖時,它會再次調用loadView或viewDidLoad
以重建它在viewDidUnload
中拋棄的內容。
但是,如果它不需要釋放內存來顯示您的詳細視圖,它將不會在正常處理中調用它。這就是爲什麼viewWillDisappear
被稱爲(和dealloc
),但從來沒有viewDidUnload
。
從蘋果公司的文檔:
當內存不足的警告時,該UIViewController類清洗 自己的觀點,如果它知道它可以重新載入或稍後再重新創建它們。如果 發生這種情況,它還會調用viewDidUnload方法,以使代碼 有機會放棄與視圖層次關聯的所有與 相關聯的對象的所有權,包括使用nib文件加載的對象,在您的viewDidLoad方法中創建的對象 以及在運行時緩慢創建對象 並添加到視圖層次結構中。通常,如果您的視圖 控制器包含網點(屬性或包含 IBOutlet關鍵字的原始變量),則應使用viewDidUnload方法 放棄不再需要的那些網點或任何其他視圖相關數據 的所有權。