正在编写一个解析一些xml的应用程序,并使用以下关键方法创建元素名称及其值的字典:
- (void)parserDidStartDocument:(NSXMLParser *)parser{
foundCharacters = [[NSMutableString alloc] init];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (accumulator) {
[foundCharacters appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([foundCharacters length] != 0) {
[parsedContent setObject:[foundCharacters copy] forKey:elementName];
}
}
泄漏发生在“[parsedContent setObject:[foundCharacters copy] forKey:elementName];”我无法找到解决这个问题的方法。
非常感谢任何见解。
编辑:
只有在多次调用解析请求时才会发生内存泄漏
我也尝试过“[[foundCharacters copy] autorelease]”但是没有用到
答案 0 :(得分:3)
“copy”方法被视为alloc / init,您负责释放它们。见这里:
所以请将您的代码更改为:
NSString *copy = [foundCharacters copy];
[parsedContent setObject:copy forKey:elementName];
[copy release];
答案 1 :(得分:2)
在你的parserDidStartDocument:
中你分配/初始化一个可变字符串,但是我没有看到你再次处理这个字符串的代码。您需要再次释放该字符串,例如在parserDidEndDocument:
方法中。
稍后会报告内存泄漏可能是因为这是实际引用变量的最后一个位置。