2012-06-25 18 views
3

我正在爲iPad製作一本互動書,並使用UINavigationController來實現頁面與下一頁之間的導航。當用戶翻頁時,下一頁被推到導航堆棧的頂部。在UINavigationController上按下很多視圖控制器時的內存問題

我現在15頁進入應用程序,當我嘗試從第14頁到第15頁時,應用程序崩潰。在控制檯中沒有錯誤消息,設備的任何崩潰日誌都沒有。

故事板中的每個視圖控制器的場景都有UIImageViews,顯示的圖像大小在5MB到20MB之間。視圖控制器的方法只被調用一次。所有應用程序資產的總大小低於200B。我正在使用ARC。

我已經使用儀器的內存監視器運行應用程序。每當新頁面打開時,該應用程序的真實內存消耗增加約80MB,當達到800MB時(設備爲iPad 3),該應用程序崩潰。

  • 爲什麼如此巨大的內存消耗?這是因爲故事板場景中的UIImageView緩存圖像?

  • 當您使用 UINavigationController和ARC時,釋放內存的最佳方法是什麼?

我嘗試添加所有視圖控制器的子視圖設置爲在視圖控制器viewDidDisappear:方法爲零,但內存消耗保持不變。

回答

6

當您使用一個UINavigationController,每個視圖控制器,你在內存推撐永遠(當然,直到你的應用程序退出),除非你的用戶按下特定的ViewController後退按鈕。它保留了一堆ViewControllers - 頂部有可見的ViewController。

所以簡單的答案是不要使用UINavigationController這個。 我建議建立自己的視圖控制器「知道」這是下一個和以前的頁面和手動負載和刪除它們在需要時。這種方式可以確保您僅在內存中有一個頁面一次(除了轉換過程中 - 也許你可以使用這個動畫過渡http://cocoacontrols.com/platforms/ios/controls/xbpagecurl)。

+0

聽起來像UIPageViewController給我。 – LightningStryk

2

您可能不希望爲此使用UINavigationController。你真的想要一個視圖控制器來管理你的所有頁面,並在刪除舊頁面的同一視圖上渲染新頁面。

相關問題