0

至少对我来说,这里有一个奇怪的情况:我有一个相对简单的程序,它从 Web 加载 XML 文件,解析它并将数据写入字典数组。每个字典代表表中的一行。该程序运行良好,如果我将模拟器连接到仪器并加载列表,则不会出现内存泄漏。

现在这是奇怪的部分:有一个按钮供用户重新加载列表。如果按下它,之前的数据被清除,新下载并解析的 XML 等等。如果我按下这个按钮,我仍然找不到内存泄漏。然而,如果我按两次,突然周围有泄漏。我很纳闷,以前没有的地方怎么突然出现泄漏(只有运行两次相同的代码才会出现泄漏)?例如,当我使用 Apple 的示例 XMLParser 的一部分时,这尤其奇怪,我的代码是他们的 1:1 副本,但是当我运行解析器两次时,仪器报告此代码中的泄漏。

我很高兴有任何帮助,我几乎不知道如何解决这个问题。代码应该没问题。我已经尝试过“构建和分析”,它也不会揭示我在仪器中看不到的任何东西。

一切顺利,罗宾

4

2 回答 2

1

这里确实没有足够的信息来做出可靠的答案。

也就是说,听起来您可能误解了您正在使用的内存泄漏检测工具的结果。如果它正在扫描对象图以查找孤立对象,则在重新加载之前它可能不会注意到对象是孤立的。这是因为在您正在使用的第 3 方库之一(或在您自己的代码中)可能存在对对象图根的静态缓存引用。重新加载后,缓存的引用将移至新的根对象和所有旧对象不再被任何根变量(调用堆栈上的局部变量或静态变量)引用,因此被孤立并“泄露”。

于 2010-01-25T23:48:39.030 回答
0

该程序运行良好,如果我将模拟器连接到仪器并加载列表,则不会出现内存泄漏。

这并不意味着您没有泄漏- 仪器可能无法捕获它们 - 它每 n/秒采样一次。

于 2010-01-25T23:48:18.247 回答