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: 368

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

Related posts about objective-c

Related posts about memory-leaks