簡體   English   中英

了解儀器進行內存泄漏檢查 - iPhone

[英]Understanding the Instrument for memory leak checking - iPhone

替代文字

上面給出的圖像是我的應用程序泄漏。

在這里,我想了解一下,在擴展細節中 - 您可以看到不同的顏色,如淺綠色,淺粉色,淺棕色,淺紫色。

每種顏色表示什么?

現在另一個困惑是“如何找到造成內存泄漏的代碼?”

高達內存泄漏的限制 - 實際的iPhone可以繼續使用。 (假設10個字節沒問題,20個字節沒問題,200個字節有問題)

  • 每種顏色表示什么?
  • 哪種顏色表示我們的代碼/從哪個細節我們可以獲得我們分配對象的代碼並忘記解除它?

(例如 - 詳細點擊UIKit第二個單元格 - 我們無法獲取代碼)

  • 為什么我們必須解決所有泄漏? - 即使是一次泄密也可以蠶食iPhone?
  • 為什么iPhone允許泄漏留在內存中? /為什么在終止申請后垃圾收集不會自動完成?
  • 如果我嘗試釋放應根據儀器解除分配的對象,我的應用程序會異常終止。 如果我不dealloc,我的應用程序運行完美,如何?
  • 為什么建議您在視圖中等待最多10秒或更長時間,如果有泄漏,儀器會檢測到泄漏?

忽略顏色,在那個[DashBoard viewDidLoad]是泄漏的來源,它是如何初始化URLConnection(可能你沒有釋放連接完成后?)

現在回答你的其他問題:

  • 為什么我們必須解決所有泄漏? - 即使是一次泄密也可以蠶食iPhone?

是。 部分原因不僅僅是你的內存耗盡,而且因為整個手機只有很多內存可供使用,看門狗應用程序會不斷監視你的應用程序,如果看到內存使用,它會提前關閉它只有不斷增長......

  • 為什么iPhone允許泄漏留在內存中? /為什么在終止申請后垃圾收集不會自動完成?

當應用程序退出時,將釋放所有應用程序內存。

  • 如果我嘗試釋放應根據儀器解除分配的對象,我的應用程序會異常終止。 如果我不dealloc,我的應用程序運行完美,如何?

在這里我無法幫助,你真的需要閱讀更多關於保留/釋放內存周期的內容...如果你發布一個保留計數為0的對象,應用程序崩潰,因為對象已經消失。

  • 為什么建議您在視圖中等待最多10秒或更長時間,如果有泄漏,儀器會檢測到泄漏?

因為樂器通常每隔一段時間對內存進行一次采樣,所以可能需要一點時間才能讓樂器在動作后讀取內存。

首先,堆棧中的東西是由它們來自哪個庫着色的,因此它不包含那么多信息。

其次,我不會擔心iPhone可以承受多少泄漏,而是專注於不泄漏。

要查找泄漏,有幾個選項:

  • 在構建項目時使用CLANG靜態分析器
  • 手動查找泄漏。 您必須始終遵循內存管理規則: 如果您allocretaincopy對象(包括使用@property (retain)(copy) ),則必須 releaseautorelease它。

顏色代表調用堆棧正在經歷的不同庫。

泄漏是由代碼中進行分配的框架引起的,即使實際分配是在OS庫中進行的。 儀器正在向您顯示泄漏的內存分配的確切位置。 您必須弄清楚代碼中的哪一行導致泄漏分配,這將是右側堆棧中的一個幀。

實際的iPhone沒有足夠的RAM可用於您的應用程序。 對於我的應用程序,我傾向於保守估計大約25MB的RAM。 如果代碼使用得足夠多,任何泄漏,無論多小,都可以沉沒眾所周知的船。

在堆棧擴展視圖中查找應用程序名稱。 內存分配通常最后顯示,因此您確切知道哪個庫負責內存分配。 因此,您應該從代碼行向下追溯到結尾。 顏色只是更容易跟蹤與相同庫相關的代碼行。 相同的庫調用將使用相同的顏色進行着色。

至於追蹤泄漏本身。 首先通過雙擊擴展視圖中的行來進行應用程序調用,並嘗試了解確切泄漏的內容。 有時您可以用非泄漏替代品替換泄漏的呼叫。 例如,我使用一個調用imageNamed從bundle中檢索圖像,由於內存不足,應用程序不斷崩潰。 我只是用google搜索圖像命名泄漏,並找到了關於如何在我的應用程序中實現圖像現金的非常有用的文章。 的確,imageNamed API泄漏。 有一些API在iphone SDK中泄漏。

此外,嘗試檢查您如何使用alloc / retain / release等,無論您是釋放還是自動釋放已分配的內存。

祝你的偵探工作順利。

我也有儀器泄漏問題。 我今天第一次運行我的應用程序使用泄漏並發現了幾個泄漏。 泄漏不應泄漏,因為它們無法泄漏,除非一些神奇的代碼正在執行並提高了我的對象的保留計數。 我了解內存管理指南,知道如何使用自動釋放池等。但即使是基於空視圖的應用程序也包含泄漏,如果我對它進行一些控制。 只需點擊2-3次左右。 繼續嘗試。 我並不了解信息工具試圖提供的信息。 這些“泄漏”真的是泄漏,還是只是對儀器應用程序可疑的東西? 如果一個沒有用戶代碼的空應用程序,只有幾個控件放在一個空視圖泄漏內存?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM