来自NSXMLParser的内存泄漏

问题描述:

即时通过Sapus Media的SVG分析系统levelSVG运行cocos2d。
我正在使用解析系统,它可以像预测的那样工作,但即时通讯存在与NSXMLParser相关的内存泄漏问题。
内存泄漏在5分钟的时间内给出fps的一致性下降,并使该应用程序在此时间段结束时以12fps的速度无用。
我已删除了我所有的粒子系统和其他潜在的泄漏对象和泄漏仍然存在..来自NSXMLParser的内存泄漏

运行内存泄漏工具:
3个泄漏对象检测:
GeneralBlock-512
GeneralBlock- 512
NSConcreteMapTable

它们链接到:

*

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 

     [parser setDelegate:self]; 
     [parser setShouldProcessNamespaces:NO]; 
     [parser setShouldReportNamespacePrefixes:NO]; 
     [parser setShouldResolveExternalEntities:NO]; 
     [parser parse]; 

     NSError *parseError = [parser parserError]; 
     if(parseError) { 
      SVGLOG(@"Error parsing SVG file: %@", parseError); 
     } 

     [parser release]; 

正如你所看到的,解析完成后该对象被释放。

开车撞我,谁知道最新情况?

+0

xml解析方法本身怎么样,可能是泄漏来自那里。 – Sarah 2011-05-16 11:37:37

+0

您是否在模拟器或设备上运行泄漏? – csch 2011-05-16 16:54:57

+0

设备。还有7个去! – Ospho 2011-05-16 22:07:53

好的,经过一番研究,我发现在使用上述URL方法时,NSXMLParser中存在一个错误。

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url] 

通过这一改变到:

NSData *xml = [NSData dataWithContentsOfURL:url];    
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xml]; 

这种固定的内存泄漏问题,但仍然didnt占FPS超过的期限一致下降。 然后我发现我的内存分配给一个特定的类,CCFollow在内存泄漏工具上的加班时间一直在增加。

然后我检查了代码,并在重复刻度更新方法中运行了无限CCAction-CCFollow。这是内存泄漏的来源。 将它从tick更新方法中移除并将其移至初始化方法可解决此问题。