aktualisieren: bearbeiten ich den Code, aber das Problem weiterhin besteht ...Seltsam iPhone Speicherleck im XML-Parser
Hallo allerseits,
dies hier meinen ersten Beitrag ist - ich diesen Ort gefunden eine große Ressource für viele meiner Fragen lösen. Normalerweise versuche ich mein Bestes, um irgendetwas selbst zu reparieren, aber dieses Mal habe ich wirklich keine Ahnung, was schief läuft, also hoffe ich, dass mir jemand helfen kann.
Ich baue eine iPhone App, die ein paar XML-Dateien mit TouchXML analysiert. Ich habe eine Klasse XMLParser, die sich um das Herunterladen und Parsen der Ergebnisse kümmert. Ich erhalte Speicherlecks, wenn ich eine XML-Datei mehr als einmal mit der gleichen Instanz von XMLParse analysiere. Hier eine der Parsing-Schnipsel ist (nur der relevante Teil):
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];
}
}
Das erste Mal, ich analysieren die XML kein Leck in Instrumenten auftaucht, ich das nächste Mal so zu tun, habe ich eine Menge von Leckagen (NSCFString/NSCFDictionary).
Instruments weist mich auf diesen Teil innerhalb CXMLNode.m, wenn ich graben sich in einem durchgesickerten Objekt:
theStringValue = [NSString stringWithUTF8String:(const char *)theXMLString];
if (_node->type != CXMLTextKind)
xmlFree(theXMLString);
}
return(theStringValue);
ich wirklich eine lange Zeit verbracht und versucht, diese mehrere Ansätze zu beheben, aber ohne Erfolg bisher Vielleicht fehlt mir etwas Wesentliches?
Jede Hilfe wird sehr geschätzt, danke!
Vielen Dank - das ist dumm von mir war. Leider sind die Lecks noch vorhanden, aber jetzt in der Klasse CXMLNode.m in dieser Zeile: theStringValue = [NSString stringWithUTF8String: (const char *) theXMLString]; if (_node-> type! = CXMLTextKind) \t xmlFree (theXMLString); } Rückgabe (theStringValue); – Chris
ah Entschuldigung, ich konnte die Formatierung nicht richtig bekommen ... – Chris
Hmmm ... das sieht eher wie eine Warnung vor einem möglichen Leck aus, als einen garantierten Lauch. Nichtsdestotrotz bin ich durch die Quelle für CXMLNode in TouchXML geblättert und kann diese Zeile überhaupt nicht finden ... welche Version des Projekts hast du und in welcher Zeile ist es? Ich stelle fest, dass der Autor, Jonathan Wight, von der TouchCode Google-Benutzergruppe ziemlich gut darin ist, auf Posts zu reagieren, die Lecks haben: http://groups.google.com/group/touchcode-dev –