2012-08-23 90 views
0

我決定在我一直在做的項目中使用故事板。當應用程序啓動時,awakeFromNib然後viewDidLoad正確,但是當應用程序完成到另一個視圖時,它不會調用viewDidUnload ,而且我認爲它們也不是dealloc 。我已經使用了Apple的樂器,並沒有顯示任何內存泄漏。故事板和內存管理

只是要注意,我使用自定義的塞格斯並通過插入NSLog s轉換的方法測試此。有沒有其他人遇到過這個?

只是想更新:dealloc實際被調用但不viewDidUnload

回答

1

viewDidUnload方法僅用於didReceiveMemoryWarning的目的(即當視圖正在被移除以恢復一些內存,但視圖控制器不是時)。如果您希望在模擬器中運行時看到viewDidUnload,請將presentViewController推送到輔助視圖,然後從模擬器的菜單中生成內存警告。我從UIViewController Class Reference引證:

當低內存條件發生並且不需要當前視圖控制器的視圖,該系統可以選擇到從內存中刪除這些看法。 [viewDidUnload方法]在視圖控制器的視圖被釋放後調用,並且是您執行任何最終清理的機會。如果您的視圖控制器存儲對視圖或其子視圖的單獨引用,則應該使用此方法來釋放這些引用。您也可以使用此方法刪除對您創建的任何對象的引用,以支持該視圖,但現在視圖不再需要時不再需要該對象。您不應該使用此方法來釋放用戶數據或任何其他無法輕易重新創建的信息。

在調用此方法時,視圖屬性爲零。

+0

即使' - (無效)dealloc'不會被調用。什麼時候通過'performSegue:WithIdentifier'方法加載一個特定的視圖控制器,真的被釋放? – tGilani

+1

@tGilani一個視圖控制器將不會被釋放,直到你解散或彈出它(例如調用'popViewControllerAnimated','dismissViewControllerAnimated'或調用一個展開的漸變)。其他不被釋放的原因將包括您保留一些其他強參考或強參考週期(例如,由於使用重複的「NSTimer」)。 – Rob

+0

你可以在這裏回答我的問題嗎?http://stackoverflow.com/questions/15545423/storyboard-controllers-not-deallocating – tGilani

1

viewDidUnload視圖時實際卸載時調用。如果您想在清理視圖時清理資源,請將其放入viewDidDisappear

如果你想看到什麼與viewDidUnload發生,運行你的應用程序在模擬器中,並從菜單欄中選擇硬件|模擬內存警告。

在內存壓力下,視圖是在屏幕上不被除去,這是當在發送viewDidUnload方法。