2016-10-01 18 views
0

我正在使用iOS Instrumentation的Allocations Profiling模板。 我創建了UIView類的擴展,它爲未添加到視圖層次結構的視圖拍攝快照。我想仔細檢查我的新方法消耗多少內存。 我發現我的新方法從堆中分配288字節,如下圖所示。 enter image description hereiOS Instrumentation:如何解釋內存分配模板?

然後我導航到相應的方法,我發現有一個大的內存量如預期。看看下面的圖片。 enter image description here

我的問題是:

  1. 爲什麼我不能看到這些堆數量龐大?
  2. 這個龐大的內存在哪裏分配?
  3. 是否有反映此擁抱數字的特定詳細視圖(Call Tree除外)?

請注意,我不是問什麼是爲視圖拍攝快照的最佳方式。我已經熟悉Apple method snapshotView。我正在做這個練習只是爲了測試我對iOS中內存使用的理解。

回答

3

一對夫婦的想法:

  1. 過濾調用樹的結果時要小心。您可能意外刪除了分析器關聯內存的例程。嘗試(a)選擇具有問題分配的圖表的範圍(以減少結果中的噪聲量); (b)去除過濾器,然後(c)擴充樹在這一點上,你看到的大內存跳躍:

    look for jump

  2. 就個人而言,我經常發現它更容易翻轉調用樹和隱藏系統庫:

    enter image description here

  3. 或者,您也可以到 「分配」 的 「統計」,找到大分配:

    enter image description here

    然後,您可以鑽入認爲:

    enter image description here

    ,然後通過單擊右側的「擴展詳細信息」面板上,跳轉到代碼中的問題:

    enter image description here

  4. 如果需要,另一種在Xcode 8中查找分配的方法是在你的方案上打開「Malloc Stack」選項,然後使用「Debug Memory Graph」選項s在https://stackoverflow.com/a/30993476/1271826中概述。例如,我使用了「調試內存圖」,找到了CG柵格數據,我可以看到這個10mb圖像的對象圖,以及可以看到在「擴展詳細信息「面板右側:

    enter image description here

+0

羅布感謝您的答案,但我不知道我怎麼能涉及您的答案,我的3個相關的問題? –

+0

你的第一個問題是「爲什麼我沒有看到分配」在我的調用樹中,我的回答是「(a)不要像你那樣過濾調用樹;並且(b)確保選擇圍繞有問題的分配「。你的第二個問題是「這個大分配是從哪裏來的」,沒有人能爲你解答,也沒有向你展示識別分配的不同方法(並且我向你展示了三種不同的方法來完成這個任務)。你的第三個問題是尋找分配的其他機制是什麼,再次,我向你展示了一些替代方案。我不知道我還能做什麼。 – Rob

+0

感謝羅布爲你的答案,但巨大的記憶不會出現沒有任何過濾器,這是因爲你的答案不幫助我。至於b,你沒有回答。最後爲c,我真的很感激你的重要選擇,但他們都沒有透露這個巨大的記憶。因此,我將等待社區中任何可能幫助我回答這些問題的投入。再次感謝。 –