-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
There's a leaking CXMLDocument object shown in instruments everytime, a request
to an XML is made to a webservice AND when there's no internet connection
available. Here's my code:
NSString *path = ... some URL
NSURL *url = [NSURL URLWithString: path];
CXMLDocument *itemListParser; = [[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil];
... other stuff ...
If we digg deeper and trace initWithContentsOfURL call then we will find this
method in "CXMLDocument.m":
- (id)initWithContentsOfURL:(NSURL *)inURL encoding:(NSStringEncoding)encoding options:(NSUInteger)inOptions error:(NSError **)outError
{
if (outError)
*outError = NULL;
NSData *theData = [NSData dataWithContentsOfURL:inURL options:NSUncachedRead error:outError];
if (theData)
{
self = [self initWithData:theData encoding:encoding options:inOptions error:outError];
}
else
{
[self release]; //My suggested fix: We need to release an alloc'ed object because after the "self = null" it will be unable to release it. See the info below.
self = NULL;
}
return(self);
}
It appears, if theData is nil (for example no connection) then self will be
nil, and so the result of the call to TouchXML initWithContentsOfURL will be
nil too. So, in my code:
CXMLDocument *itemListParser; = [[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil];
I'm alloc'ing a memory but init returns nil, and so itemListParser becomes nil
too. So later, trying to release the parser with [itemListParser release] does
nothing because release is send to nil.
I was able to fix a leak by adding "[self release]" before "self = NULL" (see
the line with my comment in TouchXML initWithContentsOfURL method)
---- additional notes ---
Using latest ToucXML release, objective-c, Mac OS X Snow Leopard.
Original issue reported on code.google.com by gyte...@gmail.com on 8 Dec 2011 at 12:11