更新:我编辑了代码,但问题仍然存在......
大家好,
这是我在这里的第一篇文章——我发现这个地方是解决我许多问题的好资源。通常我会尽力自己解决任何问题,但这次我真的不知道出了什么问题,所以我希望有人能帮助我。
我正在构建一个使用 TouchXML 解析几个 xml 文件的 iPhone 应用程序。我有一个类 XMLParser,它负责下载和解析结果。当我使用同一个 XMLParser 实例多次解析一个 xml 文件时,我遇到了内存泄漏。这是解析片段之一(只是相关部分):
for(int counter = 0; counter < [item childCount]; counter++) {
CXMLNode *child = [item childAtIndex:counter];
if([[child name] isEqualToString:@"PRODUCT"])
{
NSMutableDictionary *product = [[NSMutableDictionary alloc] init];
for(int j = 0; j < [child childCount]; j++) {
CXMLNode *grandchild = [child childAtIndex:j];
if([[grandchild stringValue] length] > 1) {
NSString *trimmedString = [[grandchild stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[product setObject:trimmedString forKey:[grandchild name]];
}
}
// Add product to current category array
switch (categoryId) {
case 0:
[self.mobil addObject: product];
break;
case 1:
[self.allgemein addObject: product];
break;
case 2:
[self.besitzeIch addObject: product];
break;
case 3:
[self.willIch addObject: product];
break;
default:
break;
}
[product release];
}
}
第一次,我解析 xml 没有泄漏显示在仪器中,下次我这样做时,我得到了很多泄漏(NSCFString / NSCFDictionary)。当我深入研究泄漏的对象时,
仪器将我指向CXMLNode.m 中的这一部分:
theStringValue = [NSString stringWithUTF8String:(const char *)theXMLString];
if ( _node->type != CXMLTextKind )
xmlFree(theXMLString);
}
return(theStringValue);
我真的花了很长时间并尝试了多种方法来解决这个问题,但到目前为止无济于事,也许我错过了一些重要的东西?
任何帮助都非常感谢,谢谢!