0

我有一個帶有導航控制器的選項卡式應用程序,其中包含選項卡和視圖控制器。當我按下某個標籤項並深入視圖控制器層次結構(由導航控制器維護)時,當我直接按Tab標籤項時會發生什麼?恕我直言,所有的視圖控制器在內存堆棧中,如果我開始從第一個視圖控制器深入再次導航,然後我將視圖控制器的副本放在導航堆棧上。我應該如何做適當的內存管理?恕我直言,我需要釋放(彈出)屏幕上的所有視圖控制器(除第一個)當用戶點擊一些標籤項目。如何實現這一目標?選項卡式應用程序+導航控制器:如何在按下選項卡時釋放堆疊的UIViewControllers?

回答

2

系統會照顧卸載聯合國需要意見時,它需要的內存(並重新加載它們在需要時),因此,如果您正確實施的viewDidUnloadreceivedMemoryWarning方法,你應該罰款。視圖控制器本身幾乎不佔用任何內存(除非你自己分配了大量的東西)。在任何情況下,它們都不會在堆棧上分配,因爲它們是在堆上分配的對象(通用目標c的經驗法則)。當您推送視圖控制器時,它將被保留,當您彈出視圖控制器時,它將被釋放。通常,您不會期望每個選項卡中的導航控制器都會彈出回到根目錄,因爲您按下了另一個選項卡,但如果您確實想要這樣做,那麼您可以使用popToRootViewController方法。

+0

謝謝。我只是試圖阻止在導航堆棧上推送重複的視圖控制器。例如,如果有5個視圖控制器已經推到屏幕上,並且如果我按下標籤欄並開始導航到深層,那麼我是否在屏幕上推動重複的視圖控制器?恕我直言,我推重複,因爲現有的沒有彈出。 – Centurion

相關問題