2012-02-27 35 views
3

我們有一個內存密集型應用的3D這主要是針對iPad 2的和iPhone 4S,但它工作在iPod Touch 4G和iPhone 3GS爲好。我們發現,iPod Touch 4G上較小的內存佔用與視網膜顯示相結合,使該平臺更容易出現內存不足錯誤。 iOS5似乎也有些降低了可用內存。最大(實際)存儲在iPod Touch 4G使用,iOS 5的

基於我們使用的平臺,我們降低3D模型的分辨率相對容易,但我們必須在加載之前設置分辨率,因此我們無法基於來自內存壓力警告O/S。

我們根據反覆試驗調整了內存使用情況,但我們發現,長時間(例如幾個月)未重新啓動的設備的可用內存比設備少得多最近重新啓動。 (即使你殺了所有正在運行的應用程序。)

我不知道他們的實際內存限制的iPod Touch 4G的應用程序使用哪些其他iOS應用開發者?

+0

我不確定是否有用的答案。這在很大程度上取決於用戶在使用應用程序之前或使用應用程序時在設備上做了什麼或使用什麼,在我看來。不知道你如何推廣它。 – onnoweb 2012-02-27 16:21:31

+0

嗯,我寧願我們的應用程序崩潰大概從不,我認爲其他應用程序開發人員在平臺上有更多的經驗可能知道這意味着「不要在iPod touch上使用超過X兆字節」。但我一直無法找到答案。 (有一個SO問題暗示了70Meg,但我認爲這個評論者只是迴應了這個問題,並沒有提供任何真正的洞察力。) – 2012-02-27 18:24:45

+0

我剛剛被SO提醒了這個老問題,我認爲值得給予一點更新。結果發現,在所有情況下解決我們的內存問題的關鍵是切換到使用壓縮紋理。實際上沒有任何缺點:它們在運行時佔用較少的內存,並且渲染速度更快。 – 2013-02-26 19:32:42

回答

3

,同時保留所有的告誡每個人都提供了記住,拇指我個人的一般規則已經在合理的天氣,你可以期望有圍繞以下幾個:

  • 512MB設備 - > 200MB可用( iPhone 4-4S,ipad公司2)
  • 256MB裝置 - >可用100MB(iPhone 3GS,iPad的,iPod Touch的3G-4G)
  • 128MB裝置 - > 50MB可用(iPhone 3G,iPod Touch的1G-2G)

如果你想嚴格地承受不知不覺的天氣,而不是以靈活的方式迴應記憶的使用,那麼你可以將這些數字減半,甚至可以減少三分之一。但是,這將是相當困難的保證英鎊的可靠性,如果在條件變得可怕,你不能扔東西落水。它更像是對你是多麼的表現很捨得扔掉在這一點上有多大的可靠性遞加。

在環境方面預測,iOS的很多更像PC比專用機,是好還是壞,有教官的操作系統的額外的獎勵。

1

很難放棄,因爲所有的外部分配的OS的確代表您UIKit中和OpenGL的實際數量。我嘗試將我自己的分配保留在30MB左右,我的頂端是50MB。我推它高達90MB,但還是拋棄了很多在這一水平,因此可能是一個壞主意,除非使用全部內存的任務是非常短暫的。

如果您需要破解圍繞當前的問題,你可以只檢測出有問題的設備前面,並在啓動時拒絕你的圖形引擎的分辨率。您可以獲得確切的設備信息,或者您可以檢查顯示比例(視網膜)與處理器內核數量和RAM數量的組合,以確定要使用的質量級別。

我已經取得了巨大成功,通過使用映射文件代替加載數據到RAM中,你可能想給一個嘗試,如果您有任何大的數據分配來減少我的內存使用情況。

同時還要注意的意見/控制從UIKit的泄漏,因爲他們消耗大量的內存,並可能導致在看似隨機時間被拋棄。我有一些代碼從幾個視圖控制器泄漏子視圖。最終這些泄漏會咀嚼我的應用程序,儘管我的應用程序的內存使用情況並未直接反映問題。