iOS XML Parser 内存泄漏与 KissXML

Posted

技术标签:

【中文标题】iOS XML Parser 内存泄漏与 KissXML【英文标题】:iOS XML Parser memory leaks with KissXML 【发布时间】:2012-09-11 08:21:28 【问题描述】:

这几天我一直被这个内存问题弄糊涂了。在我的 ios 项目中,我使用 KissXML 作为 XML 解析器。我的 XML 文件很大(15M)。现在,内存问题来了:

这是我的代码

http连接完成部分:

NSData *copyData = [NSData dataWithData:self.httpData];  //self.httpData-recieved from http connection.
dispatch_async(globalQueue,^  //globalQueue-GCD global queue.
    [AIDXMLParser universalParser:copyData];  //Class method for XML Parser.
);

在 API:universalParser 的 AIDXMLParser.m

DDXMLDocument *doc = [[DDXMLDocument alloc] initWithData:xmlData options:0 error:nil];
[doc release];

当我运行我的应用程序时。我使用 [Activity Monitor] 来捕获我的内存使用情况。

之前:[实际内存大小]为40.7M

之后:[实际内存大小为63.1M

增加的内存 (63.1M-40.7M) 永远保留在那里。

一切正常。我尝试过使用 TBXML 而不是 KissXML。使用 Instruments-Profile/Analyze 进行测试,但仍然没有错误或警告。 我不知道我错在哪里。

还有其他人面临同样的问题吗?

【问题讨论】:

试试 self.httpData = nil; 【参考方案1】:

这可能是因为您的 NSData 的大小,请尝试拆分您的 XML 并进行多次解析。

我对 10MB 以上的 JSON 也有同样的问题。

【讨论】:

这是唯一的方法吗? (- -!) 我的 NSData 的大小不超过 5MB+,但是在将 NSData 生成到 XMLDocument 后会变得很大。 好吧,终于找到出路了——改变每个XML文件的格式,让它足够小,这样会更好。

以上是关于iOS XML Parser 内存泄漏与 KissXML的主要内容,如果未能解决你的问题,请参考以下文章

golang读取XML内存泄漏?

iOS 内存泄漏与 nib

内存溢出与内存泄漏

iOS 或 MonoTouch 中的固有内存泄漏?

内存泄漏与自动释放的字符串 iphone

内存泄漏与溢出