2012-09-06 191 views
0

我的iPhone應用程序由於內存不足而崩潰。我可以看到崩潰後保存了一個名爲lowmemory的crashlog。但是,代碼中沒有泄漏。內存不足崩潰iphone

有沒有其他減少內存使用的方法?我可以看到何時在模擬器中分析應用程序的內存使用量(分配)達到91 MB,我懷疑這是應用程序在設備(iPhone 3GS)上崩潰的時間點。那時候我正在做很多字符串替換(基本上我正在用大約100個HTML代替)。

回答

3

首先我不認爲你的應用使用高達91mb(太大)。我認爲91mb - 是被分配的內存大小(並且可以被重新分配,但是這個數目沒有減少)。 你可以檢查Live Bytes列嗎? 關於字符串替換:我不知道你如何使用這樣的功能。但我建議你避免在這種情況下使用NSString,並使用NSMutableString並更改內部的字符串值 - 這樣可以避免每次分配NSString對象。

+0

它顯示了91MB的分配(活動字節)列..但它不會保持那樣...在幾秒鐘後它減少到10 mb range .. – sujith1406

+0

好的。你可以在這裏粘貼代碼的和平,你在做字符串替換嗎? – Anessence

+0

感謝那是我有大約1k行字符串替換的問題,並且這些字符串(html頁面)中的每一個都有大約30-40kb ..也許...重複分配可能已經使用了很多mem ......這減少了用法最大15 mb – sujith1406

0

您應該嘗試使用儀器工具。您可以使用XCode(cmd + I)和XCode(cmd + space => Instruments)啓動儀器工具。

如果您使用XCode啓動儀器,我建議使用「泄漏」選項。你應該按下「泄漏」,選擇「統計」而不是「調用樹」,並根據我的經驗很好 - 檢查以下複選框:隱藏Obj-C,展平遞歸,隱藏缺少的符號,隱藏系統庫。 這裏工具向您顯示在運行期間被上訴的線條。

另一種方法是啓動沒有XCode的儀器。您應該在這裏使用「活動監視器」,選擇您的設備並記錄它的活動。您應該雙擊其中一個統計信息才能獲取統計信息列表。找到您的應用程序的名稱,然後查看「Real Memory」列。用你的應用程序玩一點,如果內存在增加而不是釋放,你應該知道哪些類用於你完成的操作,並且你應該檢查你的類。

注意:如果您在沒有XCode的情況下啓動儀器,請確保該應用程序未在調試模式下從XCode啓動。 XCode 4.0中存在一個錯誤(我不知道後來它是否被糾正了),但是它發生在我身上,活動監視器的真實內存列沒有顯示正確的信息。注2:如果您正在進行內存管理測試,您應該始終使用設備來執行測試。總是。

編輯:你甚至可以在你的項目中嘗試XCode中的「cmd + shift + B」快捷鍵,它暗示了一些可能的內存泄漏。它有時是有用的,但該工具並不是每次都對:)

相關問題