Я использую NSXMLParser для анализа XML-документа.У меня есть следующие функции (среди прочих):
- (void) parserDidStartDocument:(NSXMLParser *)parser {
// Init tempString
tempString = [NSMutableString string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
// save gained data for element "date"
if ([elementName isEqualToString:@"date"])
[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
[tempString setString:@""];
}
//
// Character Handling
//
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
[tempString appendString:[[XMLParser alloc] stripUnwantedStringChars:string]]; //Just strips tabs and linebreaks and the returns the string
}
tempString - переменная экземпляра со следующим свойством:
@property (nonatomic, retain) NSMutableString *tempString;
tempString не нужно освобождать в dealloc, посколькуинициируется с помощью удобного метода, поэтому он автоматически присваивается пулу автоматического выпуска.Я также попробовал следующее с помощью alloc, init, но с тем же результатом.Итак, вот что я сделал:
1.) Запустите мой проект с инструментами, пусть он ищет утечки сразу после запуска, их нет.2.) Запустите парсер XML один раз, проверьте на утечки.Там нет ни одного.3.) снова запустите анализатор XML, теперь внезапно просочилась строка с [entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
.
Я уже часами смотрю на эти утечки памяти, что я забыл?Если вам нужно больше кода, пожалуйста, дайте мне знать, хотя я думаю, что моя проблема где-то в этих строках.
Ps.Мои проверки показывают, что между вызовами парсера (делегата) вызывается метод dealloc, поэтому я думаю, что парсер действительно загружается два раза, а не один раз.