Iphone 第二次解析调用导致NSXMLParser内存泄漏

Iphone 第二次解析调用导致NSXMLParser内存泄漏,iphone,objective-c,memory-leaks,nsxmlparser,Iphone,Objective C,Memory Leaks,Nsxmlparser,更新:当泄漏工具指向对[parser parse]的第一个调用时,我已确定泄漏仅在我第二次调用时发生。我在NSXMLParser类参考或文档中没有看到任何表明无法重新解析的内容。我错过什么了吗?每次我希望解析文档时,是否应该创建一个新的NSXMLParser 我目前正试图追踪我的iPhone应用程序xml解析代码中的漏洞。我已经用NSXMLParser搜索了其他关于漏洞的帖子,但没有找到任何我可以使用的答案,所以我非常感谢您的帮助 仪表泄漏工具正在检测以下代码中的泄漏: NSData* data

更新:当泄漏工具指向对
[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++;
这是Instruments中的视图(链接是因为我没有发布图像的代表)


我真的被这件事难住了,所以任何建议都很感激。提前感谢。

这可能是NSXMLParser中的泄漏(如果未对底层libxml调用xmlcleanuparser()),或者可重用内存被错误标记为泄漏。我认为这是解析器的典型情况,因为它们重用(而不是正确地释放)分配的内存

在NSXMLParser对象的何处调用release?您能否使用调试器或日志语句验证调用release的代码是否正在实际运行-[NSXMLParser parse]可能正在分配它希望在解析器解除分配时清理的内存。@Ryan谢谢Ryan。我的一位同事还建议,解析器可能正在泄漏,因为自动释放池可能没有及时释放。我测试了将“autorelease”调用替换为对“[parser release];”的调用在方法的末尾。使用调试器,我确认正在进行释放调用。尽管如此,泄漏仍然存在。我明白了。是否有一种方法可以确定泄漏是否真实(如果不告诉泄漏忽略它),或者我应该使用单独的NSXMLParser对象来解决这个问题?谢谢。我不认为NSXMLParser有任何被要求对文档进行两次解析的规定。我们期望您创建、解析然后销毁。
-(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
{
}