NSXMLParser Утечка памяти от второго вызова Parse - PullRequest
2 голосов
/ 24 февраля 2011

Обновление: Пока прибор Leaks указывает на первый вызов [parser parse];, я обнаружил, что утечка происходит только при повторном вызове.В справочнике или документации по классу NSXMLParser я не вижу ничего, что указывало бы на невозможность повторного анализа.Я что-то пропустил?Должен ли я создавать новый NSXMLParser для каждого раза, когда я хочу проанализировать документ?

В настоящее время я пытаюсь отследить утечку в моем коде парсинга xml для приложения iPhone.Я искал другие сообщения о утечках с помощью 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 Ответ

1 голос
/ 24 февраля 2011

Это может быть утечка в NSXMLParser (если, например, xmlCleanupParser () не вызывается в базовом libxml) или многократное использование памяти, ошибочно помеченное как утечка. Я думаю, это то, что обычно происходит с парсерами из-за того, что они повторно используют (и не освобождают должным образом?) Свою выделенную память.

...