2013-04-28 60 views
0

我建立我的第一個項目,是爲iPad如何重組的iOS項目,以避免內存問題

一個互動的電子書應用程序,我開始與單一視圖應用模板在Xcode

到目前爲止,該項目主要是一個系列的UIImageViews和MPMovieController視頻,非常串行之間的塊場動畫的至今

一切都在單個視圖下一個視圖內編碼 - 該圖像視圖淡入和淡出帶alpha動畫

我開始遇到內存問題。我已經使用過內存工具,並且看到大多數所有內容都在開始時加載到內存中(除了一些在運行時實例化的視頻)(圖像來自InterfaceBuilder)

我的問題是 - 我應該如何重組我的代碼以更好地利用內存?我應該在一個視圖控制器下分成不同的視圖,還是有多個視圖控制器?

這可能是最直接的實現?

+0

多視圖控制器 - 在UIViewController之間進行轉換,這樣iOS可以幫你卸載不必要的東西 – 2013-04-28 18:27:56

+0

你能提供更多的細節嗎?您的帖子中確實沒有足夠的知識來解決問題。 – GoZoner 2013-04-28 18:31:13

回答

0

圖像非常內存密集型。所以:

  • 直到你真的需要它(顯示)才加載圖像。當你完成它(圖像視圖不再可見)時,釋放它(通過將該圖像視圖的圖像設置爲零)。不要將圖像保存在數組或類似的東西中。不要在nib中預先創建預裝圖像的圖像視圖。

  • 當您確實需要用於顯示的圖像時,請使用imageWithContentsOfFile:而不是imageNamed:將其加載到代碼中。這樣可以防止緩存圖像。

  • 使用大於顯示尺寸的圖像會浪費內存。如果這些圖像很大,如果以顯示所需的實際大小加載圖像,則可以預先保存大量內存。這與Image IO框架和CGImageSourceCreateThumbnailAtIndex很容易做到。

+0

這裏沒有理由禁止緩存。 – 2013-05-01 15:53:15

0

我認爲你需要使用多個視圖控制器和小型分離看法,他認爲CONTROLL你的應用程序流量objescts分開你的代碼..

0

一方面,最好有多個視圖,等等..但是重寫你工作的代碼是一種痛苦(除非它是絕對必要的)。

在我看來,如果你在內存中沒有任何不必要的東西(即當你從屏幕上取下屏幕,你釋放它使用的內存),你不需要做任何事情。

畢竟,即使您將代碼拆分爲應該已經存在的代碼,但如果您的內存管理良好,它將採用完全相同的內存。

0

你應該能夠用單一視圖控制器來做到這一點:

  • 從代碼懶洋洋地加載圖片。保留一組圖像名稱而不是圖像本身,並在需要它們之前加載它們。
  • 確保您的圖片不會比他們需要的大。
  • 回收您的圖像視圖。如果用戶每次看不到兩個以上的圖像視圖(包括來自和來自某個過渡),則應該只有兩個圖像視圖。
  • 不要擔心圖像是否被緩存; iOS的緩存旨在在壓力下釋放其內容。也就是說,不要實現你自己的緩存系統。在壓力下您可能無法正確釋放圖像。如果您需要緩存,請使用NSCache