Я использую NSXMLParser для анализа XML-документа. У меня есть следующие функции (среди прочих):Утечка памяти в XML Parser
- (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 Parser, теперь неожиданно вышла строка с [entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
.
Я изучаю эти утечки памяти в течение нескольких часов, что я забыл? Если вам нужно больше кода, пожалуйста, дайте мне знать, хотя я думаю, что моя проблема находится где-то в этих строках.
Ps. Мои проверки показывают, что между вызовами парсера (делегата) вызывается метод «dealloc», поэтому я думаю, что парсер действительно загружается два раза, а не один раз.
Большое спасибо, это было то, чего мне не хватало. Теперь он работает как шарм :) – Robin