2012-01-27 51 views
6

我有一個奇怪的情況。我有一個相當強烈的記憶過程(圖像處理)運行,但我已經制定了所有的結果,並且它在99%的時間內運行得很好。iOS應用程序在從後臺返回後從內存警告崩潰,但不是之前?

但是,如果我將應用程序置於非活動狀態或後臺狀態,則在返回並嘗試運行相同的過程時,會出現內存警告,然後應用程序崩潰。

我已經使用儀器來分析兩種使用情況下的內存佔用情況,內存佔用情況完全相同。但是,如果我沒有將應用程序置於後臺(或不活動),它不會給我任何內存錯誤並且完成正常工作。在將其置於後臺(或不活動)的用例中,我收到內存錯誤並崩潰。

有沒有人有關於此的任何信息?我一直在努力研究net/irc/stack over/apple文檔。蘋果(iOS)在我從後臺返回後是否允許我的應用程序允許運行的內存量減少?有什麼辦法可以防止這種情況發生?或者我忽略了其他更簡單的解決方案?

(注意,沒有內存泄漏)

+0

請將錯誤消息添加到您的Q. – mit3z 2012-01-27 07:56:03

+0

沒有錯誤消息,因爲它是導致崩潰的低內存錯誤。 – 2012-01-27 08:03:23

+0

當您進入或離開前臺/退出/變爲活動狀態時,您是否在您的應用程序委託方法中執行任何操作? – jrturton 2012-01-27 08:14:46

回答

2

好吧搞清楚了 - iOS沒有做任何愚蠢的事情,當然是開發者:)還有另一個組件(ViewController)給我的項目,它在從後臺返回時做了一些事情,比如分配內存。但是,這種觀點並不積極,因此分配它所需的內存證明是無用的。清理代碼後,我沒有遇到任何內存錯誤。

0

也許您的應用程序在後臺接收內存警告,同時,你的這種反應是不同的:例如,在後臺的所有視圖控制器可以有自己的內容在接收到內存警告時卸載,但在前臺,您的活動視圖控制器不會被卸載。如果說視圖控制器或其中一個對象被設置爲應用程序中某些其他進程的委託,而這些進程不響應低內存警告,則可能最終將消息發送到釋放實例。

如果你知道崩潰的細節,你真的應該包括,以及更多關於應用程序的結構,這是我最好的猜測。

+0

我在後臺沒有收到任何內存錯誤,並且在恢復應用程序時視圖全部加載。但是當我在應用程序中點擊「開始」以開始處理圖像時,由於內存不足而崩潰,但是隻能在從後臺返回後纔會崩潰。 – 2012-01-27 08:04:52

+0

(我正在用這個海綿工作)是的,問題不在於它的應用程序在後臺崩潰,它回到前景很好,問題是當我們繼續使用該應用程序崩潰,由於內存不足的情況。如果我們執行完全相同的行爲,但無法首先快速切換應用程序,它會正常工作,而不是一個警告。 – Shizam 2012-01-27 08:08:13

+0

那麼您的應用如何響應低內存警告?你擺脫了什麼? – jrturton 2012-01-27 08:08:47

2

只是爲了檢查,當啓動任何後臺進程時,它應該在autorelease池中。後臺進程與主線程並行運行。所以,在背景上執行任何任務時,我們應該查看內存。這是泄漏常見的常見錯誤。處理UIKit的操作也總是在主線程上運行。所以如果你通過背景處理任何數據&想要在UI上顯示它,那麼將在主線程上加載。

相關問題