2010-01-25 90 views
0

我有一個,至少對我來說,這裏奇怪的情況:我有一個從網絡加載一個XML文件,分析它,並把數據寫入字典的數組一個相對簡單的程序。每個字典代表表中的一行。該程序工作正常,如果我將我的模擬器附加到儀器並加載列表,則沒有內存泄漏。內存泄漏後多工

現在這裏是陌生的一部分:沒有爲用戶重新加載列表按鈕。如果按下它,則先前的數據將被清除,新下載和解析的XML等等。如果我按下這個按鈕,我仍然無法找到內存泄漏。然而,如果我按兩次,突然間就會出現漏洞。我感到非常困惑,突然之間如果以前沒有泄漏(如果相同的代碼運行兩次,泄漏只會出現)?當我使用Apple的示例XMLParser的一部分時,這特別奇怪,我的代碼是它們的1:1副本,但是當我運行解析器兩次時,儀器報告了此代碼中的泄漏。

我很高興的任何幫助,我幾乎不知道如何得到這個。代碼應該沒問題。我已經嘗試過「構建和分析」,它不會讓任何我在儀器中看不到的東西都得到回報。

所有最優秀的,羅賓

+2

我們應該神奇地猜測是什麼原因造成的? – 2010-01-25 23:22:14

+0

不,你絕對不會這樣做。我只是想知道是否有人以前有過這個問題,以及泄漏是否真的是泄漏(但我猜他們是)。泄漏是相當多和廣泛的,所以我將不得不張貼一半的項目,這也不會幫助你。 – Robin 2010-01-25 23:37:35

+0

發佈一些代碼...至少按鈕處理程序的代碼。 – 2010-01-25 23:37:37

回答

1

這裏確實沒有足夠的信息來作出明確的答案。

這就是說,它聽起來就像你可能會可能會誤以爲你正在使用的內存泄漏檢測工具的結果。如果它正在掃描查找孤兒對象的對象圖表,它可能不會注意到一個對象是孤立的,直到您重新加載。這是因爲在您正在使用的其中一個第三方庫(或您自己的代碼中)中,可能存在對對象圖的根的靜態緩存引用。一旦重新加載,緩存的引用將移動到新的根對象和所有舊對象不再被任何有根變量(調用堆棧或靜態變量上的局部變量)引用,因此被孤立並「泄漏」。

+0

非常感謝,這聽起來很有趣。我完全理解,只要你沒有代碼,你就不能提供詳細的解決方案,但是有什麼方法可以檢測這些緩存對象是否被使用(例如,是否有可能將此緩存?)謝謝非常適合您的輸入! – Robin 2010-01-26 22:53:16

0

程序工作正常,如果我附上 我模擬器儀器和負載 名單,沒有內存泄漏。

這並不意味着你必須無泄漏 - 工具可能無法趕上他們 - 這樣品每N /秒。