2009-01-30 50 views
22

我通過Xcode使用Leaks Instruments功能來(嘗試和)發現內存泄漏。我還沒有想出如何使用這個程序。我在程序中點擊Leaks,看到內存不斷增加,因爲我在模擬器中做了各種各樣的事情。我顯示了擴展詳細信息窗格。擴展詳細信息窗格中引用我的應用程序的唯一內容是主要的。就像Xcode生成的主要方法一樣。其他的一切都是UIKit,Foundations和我沒有寫的其他SDK類。我做錯了什麼,沒有什麼是從我的應用程序顯示出來的?如何檢測iPhone上的內存泄漏?

之前我打了3分鐘,有超過100泄漏共計2.5K。這是常見的嗎?

+1

您是否正在查看實際的「泄漏」數據或者您在查看對象分配數據?如果你在看後者,那麼是的,這很正常......那些不是泄漏,只是分配。它讓你瞭解你的內存佔用情況。 – 2009-01-30 03:41:27

+0

我在看泄漏。我唯一的東西是主要的。隨着我使用該應用程序,泄漏和字節的數量不斷增加。我不明白主力可以如何泄漏這麼多。 – 4thSpace 2009-01-30 07:10:09

+0

確保所有的alloc都被釋放。如果不是你正在創建內存泄漏。 – 2009-01-31 23:18:35

回答

3

我不熟悉如何使用泄漏,但您可以隨時嘗試在您的代碼上運行Clang分析器,看看它是否會產生任何結果:http://clang.llvm.org/StaticAnalysis.html。它通常會發現許多可能導致內存泄漏的錯誤。

+0

我下載了該工具,只是在它的文檔中發現它似乎與XCode中已包含的相同(使用「command-shift-a」執行)。真正? – Jonny 2010-08-30 03:52:48

+0

是的。一年半前,當我發佈這個,它並沒有包含在Xcode中。 – 2010-08-31 07:45:51

5

將儀器面板上的視圖更改爲「Extended Detail」。這將顯示您停止錄製並選擇泄漏對象後每個泄漏對象的堆棧跟蹤。

您看到調用到API,但你有興趣在API調用之前找到你的應用程序的最後一個方法是什麼,那就是泄漏位置。

尖端:打開「聚存儲器內容」中的泄漏視圖。看到對象值也應該有助於找出問題所在。

你不想要任何泄漏。 100個泄漏不典型(至少在我的應用程序;)典型的應該是0

1

還要注意的是,泄漏的工具是不會告訴你的實例,而對象過保留,仍然守住了。泄漏是應該放棄的物體只是在沒有人的情況下進行清理的情況。即使你認爲它們應該消失,過度保留的對象也會被有效地保留 - 因此泄漏工具無法指出它們,因爲它們仍然被引用,並且無法將它們與應該保留的對象區分開來。

爲了找到這些,使用內存報告工具,並確保內存使用下山你釋放一個對象完全後。如果你注意到有些東西沒有釋放內存,你可以從dealloc中放置斷點開始,看看你期望看到的釋放是否真的被釋放。

你需要尋找這兩種情況下,保持一個乾淨的內存佔用。

2

請記住,模擬器可以在設備不會泄漏。曾經用UITableViewController類進入這個領域。

2

使用LLVM/Clang靜態分析儀。

3

Xcode的:運行 - >啓動與性能工具 - >泄漏

0

要檢測你可以使用Xcode中的「建立與分析」功能的內存泄漏。

只需在Xcode菜單中選擇Build - > Build and Analyze

1
Run -> Start with Performance Tool -> Leaks 
0

泄漏應用:run -> Start with Performance Tool -> Leaks

Apple的儀器實用程序可以在/Developer/Applications/Performance Tools中找到。

0

查找內存泄漏的最佳方法之一是選擇產品 - >分析。在左邊的Xcode顯示哪個文件存在內存泄漏。什麼是導致內存泄漏的變量。這是查找內存泄漏的最佳方法之一。