2013-03-04 38 views
1

正如標題所示,我有一個可在iPad 2上運行的應用程序,但在iPad 3上崩潰。運行時,控制檯給我的內存不足警告信息。當碰撞發生了,我symbolicate它,但沒什麼好說的,我可以涉及到的代碼,就像它顯示應用程序在iPad 2上正常工作,在iPad 3上崩潰,內存不足警告

process name, UUID, rpages, recent_max, [reason] (state) 

,並根據這些列標題只是十六進制的東西,沒有什麼顯示方法調用或項目行。

任何想法?我是否在允許更好的崩潰日誌的代碼中缺少一些標誌?

謝謝。

+0

是iOS版兩臺設備上的版本完全相同? iPad 3是否會一直在同一個地方或每次不同的地方墜毀?是否適用於所有的iPad 3,或僅僅是一些(或一個)?你是否在'didReceiveMemoryWarning'例程中釋放了大量內存? – Rob 2013-03-05 23:17:51

回答

2

如果您獲取的內存不足警告並且未能釋放足夠的內存爲了解決這個問題,你的應用幾乎肯定會崩潰。問題是,我不認爲它墜毀的詳情或原因可能是照亮的。此時,您正在評估次要症狀。你真的需要回去找出爲什麼你首先得到了低內存警告並解決了這個問題。

正如丹尼爾說,你可以看看Technical Note 2151,但因爲它說:

當你看到一個低內存崩潰,而不是被關心你的代碼的哪一部分在終止時正在執行,您應該調查您的內存使用模式以及對低內存警告的響應。 Memory Allocations Help列出瞭如何使用泄漏工具發現內存泄漏的詳細步驟,以及如何使用分配工具的Mark Heap功能來避免遺棄的內存。 Memory Usage Performance Guidelines討論了響應低內存通知的正確方法以及有效使用內存的許多技巧。還建議您查看WWDC 2010會話Advanced Memory Analysis with Instruments

所以,一對夫婦的想法:

  1. 你有沒有找過泄漏?文章將指導您如何使用儀器來查找泄漏。

  2. 如果你打開殭屍,你有沒有把它們關閉?殭屍是一個很好的診斷工具,但只是消耗內存。

  3. 你有沒有通過靜態分析儀運行的代碼(以下簡稱「產品」菜單上轉變 + 命令 + 或選擇「分析」)?特別是如果使用非ARC代碼,這可能會發現很多內存問題。

  4. 您是否檢查過您的分配原因,並且未使用儀器的Allocations工具進行抵消減少。使用它,您可以運行該程序,查看圖形上的內存消耗情況,並查看是否有任何增加量在某個時間點沒有被相應的減少量所抵消。如果是這樣,請突出顯示圖中的增加值:

    例如,運行分配工具時,請按住選項鍵,然後用鼠標單擊並拖動以突出顯示部分時間軸,以確定你想檢查。您可能希望關注您的某個分配高峯。例如,我發現了一個凸起在我的分配,並強調它是這樣(這是在我創建viewDidLoad一個巨大的數組一個可笑簡單的例子,但希望它給你的想法):

    allocations

    注,我發現在下面的面板中顯示調用樹很有用,通常選擇「隱藏系統庫」很有用,可以專注於你的代碼(也可以是「反向調用樹」)。如果你在儀器方法的名稱,雙擊(在我的例子,在這裏,這將是viewDidLoad中),儀器便會顯示您的代碼,在做分配:

    show code

+0

謝謝,這真的很有幫助,但爲什麼這隻會發生在iPad 3?它的內存比iPad 2少嗎? – Huang 2013-03-05 22:47:40

+0

@黃不,它有更多。所以如果你得到一些內存警告,這意味着你有一些令人震驚的內存消耗發生。您可以查看配置(iOS版本,視網膜與非視網膜,wifi v蜂窩設置等)的差異,但對於低內存警告,我會專注於泄漏和分配。花費大量時間查看碰撞日誌有點像在山谷中觀察汽車的殘骸,在這裏分析由碰撞引起的扭曲金屬的性質通常與導致汽車駛離的原因無關首先是懸崖。 – Rob 2013-03-05 23:13:43

相關問題