NSXMLParser内存泄漏来自第二次解析

时间:2011-02-23 21:15:36

标签: iphone objective-c memory-leaks nsxmlparser

更新:当Leaks仪器指向第一次调用[parser parse];时,我发现泄漏只发生在我第二次拨打此电话时。我没有在NSXMLParser类引用或文档中看到任何指示无法重新解析的内容。我错过了什么吗?我是否应该在每次要解析文档时创建新的NSXMLParser?

我目前正在尝试追踪iPhone应用程序的xml解析代码中的泄漏。我通过NSXMLParser搜索了其他关于泄漏的帖子,但是没有找到我可以使用的任何答案,所以我非常感谢帮助。

仪器泄漏工具正在检测以下代码中的泄漏:

NSData* data = [NSData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource: @"collisionGraph" ofType: @"graphml"]];
NSXMLParser* parser = [[[NSXMLParser alloc] initWithData: data] autorelease];
[parser setDelegate:self];
[parser parse];    <<<<< leak here according to Leaks
self.currentPass++;

...

[parser parse];
self.currentPass++;

我从委托回调方法中删除了所有代码,但这并没有阻止泄漏。

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName 
 namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
   attributes:(NSDictionary *)attributeDict
{
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
}  

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
 namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName
{
}

以下是乐器http://i22.photobucket.com/albums/b311/Erithil/ParserLeak.png中的视图(链接,因为我没有代表发布图片)。

我真的很难过,所以任何建议都值得赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:1)

可能是NSXMLParser中的泄漏(例如,如果未在底层libxml上调用xmlCleanupParser())或可重用内存被错误地标记为泄漏。我认为解析器通常会因为重用(并且没有正确释放?)分配的内存而发生这种情况。