我使用 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 Parser,现在突然出现[entryDict setObject:[tempString copy] forKey:kXMLDictDateKey];
泄漏。
我已经研究这些内存泄漏几个小时了,我忘记了什么?如果您需要更多代码,请告诉我,尽管我认为我的问题出在这些行中。
附言。我的检查显示在解析器(委托)调用之间调用了“dealloc”方法,因此我认为解析器实际上被加载了两次,而不仅仅是一次。