我在使用UITabBarController到UINavigationController的應用程序中更改了導航。即以前的解決方案(第1版)僅基於TabBarController - 4 ViewControllers(一個簡單的TableView,一個簡單的自定義視圖和一個具有多個疊加層的MapView)。第二個版本僅基於UINavigationController。使用NavigationController進行內存管理的視圖
在TabBarController的情況下,它很清晰,簡單,一切正常,尤其是MapView。我的意思是:MapView加載了一次(具有大量的疊加層),當我轉到另一個視圖並返回到MapView時,MapView仍然存在,疊加層已經加載並顯示(簡單檢查:MapView的viewDidLoad被調用每個應用程序運行一次,我有一些調試消息)。
現在我將導航邏輯更改爲UINavigationController。一切工作正常的第一次看 - 但:viewDidLoad(每個視圖)每次我導航到視圖時調用。特別是在MapView的情況下很煩人 - 每次都會執行疊加的加載,這需要一些時間,並且在某些情況下會導致應用程序崩潰。
OK,我的問題:
它是某種NavigationController的 「常見」 的行爲?
我可以改變這種行爲,所以viewDidLoad只會被調用一次嗎?
還有更多 - 我怎樣才能影響某些視圖的「顯示順序」?
我理解其中的邏輯可能更復雜,但我明白任何答案或暗示;)
一些相關的情況:
- 的TabBar和導航控制器不結合。
- 我使用故事板,segues是在UIB中設計的,沒有像我的代碼中的perfomSegue或prepareForSegue這樣的手動調用。一個按鈕會觸發MapView。
- 我使用push segues。
- 我也嘗試使用模態賽格,但沒有任何這種行爲的變化。
- 任何viewDidUnload都不會在視圖中的縱向間調用。
- 未收到內存警告。
- 在模擬器和iPhone 4上都沒有測量到內存泄漏。
- 我試圖構建一個非常簡單的臨時項目/應用程序,只關注導航。控制器和其他視圖沒有任何編碼,只是故事板。這是一樣的行爲。
- 有一個問題,導致應用程序崩潰時,我快速和定期點擊導航按鈕和返回按鈕之間的一個視圖和MapView。在大多數情況下,當我在MapView完全顯示(即覆蓋圖)之前點擊後退按鈕時,應用程序崩潰。當我增加1秒時它是固定的。 viewDid中的延遲方法調用在MapView中消失。這是不公平的修復,我知道;)
在分配導航控制器時分配導圖類之前檢查它是否爲零,如果沒有,則直接將其分配給導航控制器上的導圖類。 – prasad 2013-03-09 15:05:08