我正在运行cocos2d与levelSVG,一个来自Sapus Media的SVG解析系统。
我正在使用解析系统,它按预期工作,但我在与NSXMLParser相关的内存泄漏方面存在一些问题。
内存泄漏会在5分钟的时间内使fps保持一致的下降,并且在此时间范围结束时以12fps的速度渲染应用程序。
我已经删除了所有粒子系统和其他可能泄漏的物体,泄漏仍然存在。
运行内存泄漏工具
检测到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 :(得分:0)
好的,经过一些研究后,我发现在使用上述URL方法时NSXMLParser中存在一个错误。
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url]
将此更改为:
NSData *xml = [NSData dataWithContentsOfURL:url];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xml];
这解决了内存泄漏问题,但仍未考虑到时间范围内fps的一致下降。 然后我发现我的特定类的内存分配,CCFollow在内存泄漏工具上一直在增加加班时间。
然后检查了代码,我在重复的tick更新方法中运行了无限的CCAction-CCFollow。这是内存消耗的来源。 将其从tick更新方法中删除并将其移至初始化方法可解决此问题。