2010-01-25 63 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 /秒。