多次加载后出现内存泄漏

时间:2010-01-25 23:18:16

标签: iphone objective-c memory-leaks instruments

我在这里有一个奇怪的例子:我有一个相对简单的程序,它从Web加载XML文件,解析它并将数据写入字典数组。每个字典代表表中的一行。该程序工作正常,如果我将我的模拟器连接到仪器并加载列表,则没有内存泄漏。

现在这里有一个奇怪的部分:有一个按钮供用户重新加载列表。如果按下它,将清除先前的数据,新下载和解析的XML等等。如果我按下这个按钮,我仍然找不到内存泄漏。然而,如果我按两次,突然间四处都有泄漏。我很困惑,怎么会突然泄漏以前曾经没有(只有相同的代码运行两次才会出现泄漏)?我使用Apple的示例XMLParser的一部分是特别奇怪的,我的代码是他们的1:1副本,但是当我运行解析器两次时,仪器会报告此代码中的泄漏。

我很高兴得到任何帮助,我几乎不知道怎么做到这一点。代码应该没问题。我已经尝试过“构建和分析”,但它并没有透露任何我在仪器中看不到的东西。

一切顺利,罗宾

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

  

该程序运行正常,如果我附加   我的模拟器到仪器和负载   列表中没有内存泄漏。

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