2012-04-21 52 views
0

我有一個應用程序在iPAD上運行。非常複雜的我會說。我現在面臨的主要問題是內存崩潰。經過幾個討論主題後,我無法弄清楚如何解決它。XCode heapshots非對象增加導致內存崩潰

我所有的內存泄漏都是固定的。在監測儀器中的堆積時,它們每個週期一直增加1 MB的量級(我在應用程序的一個「正常」狀態下采取了爆發)。 80%的堆積增加在「非對象」類別中。他們都有一個引用計數爲1.

這些非對象內存佔用我的內存崩潰的可能原因?或者這只是一個症狀?我應該尋找其他地方的根源嗎?如果這些是可能的原因,那麼什麼是一種系統的方式來消除這些記憶豬?

編輯:添加了屏幕截圖。正如你所看到的,沒有調用我的代碼(除了底部的main())。有人可以對右側的擴展細節有任何意義,我可以在哪裏尋找,刪除引用計數爲1的16位內存(非對象)?這只是一個例子,有成千上萬,導致我的記憶成長。

enter image description here

+0

道歉,我的形象無法上傳,由於我在這個論壇上的名譽低:-)應該添加一次,我可以。我一直在爲這個問題奮鬥了幾個星期。我保證在我進步的同時回到我的發現。 – zolio 2012-04-22 07:36:53

+0

添加圖片(屏幕截圖) – zolio 2012-04-22 15:37:35

+0

這裏是關於這個問題的一個更新。我將整個代碼遷移到ARC。它解決了很多問題。爲了給出完整的圖片,仍然有一些記憶豬發生。當深入挖掘時,我發現我的一個數據庫函數正在斷開連接(不關閉它),導致內存佔用。感謝大家幫助我。 – zolio 2012-06-29 12:58:41

回答

1

我猜想這些都是在堆上分配的緩衝區簡單,與malloc()。對於在兩個heapshot之間分配和未分配的所有分配,請檢查堆棧跟蹤以查看導致分配的原因。如果它在您的代碼中,請確保您釋放您分配的任何內容。順便說一句,並不是所有的內存管理問題都會導致真正的泄漏。一個真正的泄漏是你的代碼已經失去了地址的分配,所以它不可能釋放它。僞泄漏是您仍然可以引用該對象的位置,但是您的代碼永遠不會再使用它。也就是說,你已經將它存儲在某個數據結構中,在那裏它永遠不會再被訪問,當你真的應該釋放它並忘記它。

因此,您可能會對非對象分配負責,因爲當您不需要時可以保留對象。

+0

感謝您快速回答。在大多數情況下,堆棧跟蹤不是我的代碼(我假設的庫代碼)。真的很難找到導致它的原因。如果有幫助,我可以發佈樣本。 – zolio 2012-04-21 12:05:45

+0

它看起來像是由於WebKit /一個WebView。你在使用這些嗎? – 2012-04-23 15:51:57

+0

是的,你是對的。我使用的是webview,當我從代碼中移除webview時,這個非對象也顯着下降。我需要在我的應用程序中使用webview。什麼可能導致它?任何我可以進一步研究的東西?再次感謝您的努力。 – zolio 2012-04-23 22:50:58