更新:我編輯的代碼,但問題仍然存在...在XML解析器奇怪iPhone內存泄漏
大家好,
這這裏是我的第一篇文章 - 我發現這個地方有很大的ressource爲解決了我的許多問題。通常我會盡我所能來解決所有問題,但這次我真的不知道什麼地方出了問題,所以我希望有人能幫助我。
我正在構建一個使用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);
我真的花了很長時間,並試圖多種方法來解決這個問題,但都無濟於事到目前爲止,也許我錯過了一些重要的東西?
任何幫助,高度讚賞,謝謝!
非常感謝你 - 那是我傻的。不幸的是,泄漏仍然存在,但現在在此行的CXMLNode.m類中: theStringValue = [NSString stringWithUTF8String :(const char *)theXMLString]; if(_node-> type!= CXMLTextKind) \t xmlFree(theXMLString); } return(theStringValue); – Chris 2009-06-20 11:49:24