Strange iPhone memory leak in xml parser
        Posted  
        
            by Chris
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Chris
        
        
        
        Published on 2009-06-20T11:02:46Z
        Indexed on 
            2010/03/19
            20:51 UTC
        
        
        Read the original article
        Hit count: 421
        
Update: I edited the code, but the problem persists...
Hi everyone,
this is my first post here - I found this place a great ressource for solving many of my questions. Normally I try my best to fix anything on my own but this time I really have no idea what goes wrong, so I hope someone can help me out.
I am building an iPhone app that parses a couple of xml files using TouchXML. I have a class XMLParser, which takes care of downloading and parsing the results. I am getting memory leaks when I parse an xml file more than once with the same instance of XMLParser.
Here is one of the parsing snippets (just the relevant part):  
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];
		}
	}
The first time, I parse the xml no leak shows up in instruments, the next time I do so, I got a lot of leaks (NSCFString / NSCFDictionary).
Instruments points me to this part inside CXMLNode.m, when I dig into a leaked object:  
theStringValue = [NSString stringWithUTF8String:(const char *)theXMLString];
if ( _node->type != CXMLTextKind )
   xmlFree(theXMLString);
}
return(theStringValue);
I really spent a long time and tried multiple approaches to fix this, but to no avail so far, maybe I am missing something essential?
Any help is highly appreciated, thank you!
© Stack Overflow or respective owner