更新:当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中的视图(链接,因为我没有代表发布图片)。
我真的很难过,所以任何建议都值得赞赏。提前谢谢。
答案 0 :(得分:1)
可能是NSXMLParser中的泄漏(例如,如果未在底层libxml上调用xmlCleanupParser())或可重用内存被错误地标记为泄漏。我认为解析器通常会因为重用(并且没有正确释放?)分配的内存而发生这种情况。