2012-07-27 64 views
0

我很驚訝iOS 5.1不能像我期望的那樣管理內存。當設備運行很多應用程序時,iOS似乎不會在後臺殺死內存佔用應用程序,但也會向我自己的應用程序發送內存警告。iPhone iOS什麼是處理內存警告的最可接受的方式?

例如,顯示UIImagePicker在兩個測試設備上崩潰了應用程序。雙擊主頁鍵並殺死一些後臺應用程序可以防止應用程序接收到內存警告和崩潰。

如果iOS不會爲我騰出內存,是否可以通過顯示某種警告視圖來通知用戶內存不足以及某些後臺任務必須被終止?

我不知道如何處理這些事件 - iOS需要時間清理一些內存(而應用程序響應內存警告)?

+1

我懷疑蘋果是否會批准一個應用程序,要求用戶爲了繼續工作而殺掉其他應用程序。 – Thilo 2012-07-27 01:24:42

回答

5

iOS在處理內存警告(包括殺死背景應用程序)之前會執行很多操作。從iOS 5開始,iOS甚至會盡可能減少內存警告,這意味着如果真的需要你擺脫使用內存但現在不需要的東西,您可以安全地重新創建,而不需要花費數小時)。如果你的應用程序崩潰而沒有先給你一個內存警告,那麼你有可能分配了太多的內存,以至於在系統決定殺死你之前,系統不能告訴你內存用完了,原因是內存警告計劃在主線程的runloop中,直到您給runloop時間做另一次迭代,您將不會收到警告。

此外,Apple不喜歡你告訴用戶存在內存問題;它的應用程序必須處理它,而不是用戶!因此,如果在審覈團隊審覈您的應用時出現內存警告(傳言稱他們發送這些警告來測試您的應用對它們的反應),那麼您的應用也會遭到拒絕。

Soo,總結它up:iOS確實可以像你期望的那樣工作,通過殺死它可以甚至關閉其他系統守護進程,只有在發生這種情況之後,你纔會收到內存不足的通知。響應這些警告的正確方法是釋放盡可能多的內存,從未來可以輕鬆重新創建的大型內容開始(例如,如果您的應用程序顯示大量圖片,但並非所有內容都可見,扔掉那些現在不可見的東西)。告訴用戶是處理這個問題的錯誤方式,Apple不喜歡它,所以儘量在你的最後解決問題。

+0

很高興知道他們測試內存警告。我會看到如何使應用程序推遲重要的行動,直到內存情況穩定。 – 2012-07-27 13:50:21

相關問題