2016-07-22 99 views
1

我運行了儀器的「泄漏」工具來測試我的應用程序是否有任何泄漏,並且它顯示我有一些泄漏。我不是在固定泄漏的專家,我在想,如果在iOS中泄漏內存

  1. 我有一個泄漏,並
  2. 我應該怎麼做來解決它。

enter image description here

+1

我會謹慎地回答:*「也許你做的,也許你不知道。*這些都是小的內存對象而且似乎只有少數幾個,泄漏檢測器*可能會被誤認爲,當你真的泄漏時,這個顯示會持續很多頁面。此外,隨着時間的推移,列表將非常明顯*延長,並且每當您看到它時,相同的地址將保留在列表中。如果這不是你(清楚地)看到的......你會清楚地知道它,當你看到它時......它可能是一個誤報。 –

回答

4

你似乎有泄漏,但它看起來溫和。您可以單擊內存地址旁邊的小箭頭,它應該帶您進入一個屏幕,您可以在其中鑽取並查看分配內存的位置,這是確定爲什麼未分配內存的第一步。 (我會啓動非malloc對象,因爲它們更經常地映射到您的代碼並且更容易診斷)。

但有時你會看到謙虛泄漏這樣它們,麥克羅賓遜說,誤報。即使這不是誤報,它可能來自操作系統本身,而不是您的代碼。因此,我們有時會經歷一個真正強調應用程序的練習(例如,重複運行應用程序中似乎會產生泄漏的部分),以查看泄漏的增長速度(如果有的話)。它看起來像你的泄漏可能加起來不到1千字節左右,並且不會繼續增長,你可能會選擇不擔心它。 (或者至少一次,你已經對自己的代碼沒有任何東西感到滿意了)。

儘管如此,我個人並不關心這些適度的泄漏,而是整體內存使用量的顯着增長。它可能只是一個適當的圖像緩存,或者它可能是一些廢棄內存的標誌(這個漏洞工具不會顯示給你)。我會嘗試模擬內存警告,看看有多少內存被恢復。您也可以拖動整個時間表並轉到分配視圖,您可以查看該內存消耗的帳戶。您可能希望確保沒有與「泄漏」工具報告的適度泄漏無關的更深的內存問題。並非所有的內存問題都出現在「漏洞」中:「分配」增長也可能表明存在問題,我有點擔心你沒有看到你的內存使用率下降到穩態水平。

蘋果共享一個例子分配圖,建議我們要提防紅色的「浪費」了的記憶。暖機部不是那麼關鍵的,也不是將中間電平(只要它不是高),但穩態水平的生長是一個更嚴重的存儲器的問題的指示:

enter image description here

就你而言,我沒有看到應用程序完全恢復到穩定狀態,這就是爲什麼我有點關注。但是我不確定你使用了多少應用程序,或者是否讓它有機會回到穩定狀態。

如果您觀看(有點過時但仍然相關)的WWDC 2013 Fixing Memory Issues,它將使用工具和技術來診斷和解決內存問題。這是上面圖表的來源並更詳細地描述它。請注意,PDF演示文稿很好,但視頻更好,因爲它包含了使用樂器的一些實際演示。 WWDC 2012 iOS App Performance: Memory也不錯。 (它看起來像有可能是流媒體視頻的問題,但它看起來像你仍然可以下載它。)

+0

偉大的答案羅布! –