Ajeet Pratap Maurya
Ajeet Pratap Maurya

Reputation: 4254

NSXMLParser parse method memory leak

I dont know why this NSXMLParser parse method is leaking. I looked at the other similar SO question, but couldn't resolved it.

Here is my code.

 - (void)parseXMLFileAtURL {
self.results = [[NSMutableArray alloc] init];

NSURL *xmlURL = [NSURL URLWithString:@"http://www.dukascopy.com/swiss/video/rss/"];
    NSData *dataXml = [[NSData alloc] initWithContentsOfURL:xmlURL];
NSXMLParser *MyrssParser = [[NSXMLParser alloc] initWithData:dataXml];
[dataXml release];

[MyrssParser setDelegate:self];


[MyrssParser setShouldProcessNamespaces:NO];
[MyrssParser setShouldReportNamespacePrefixes:NO];
[MyrssParser setShouldResolveExternalEntities:NO];

[MyrssParser parse]; // memory leak here
MyrssParser.delegate=nil;
[MyrssParser release];
if(!imagesArray)
{
    imagesArray = [[NSMutableArray alloc] initWithCapacity:[self.results count]];
    for(int i=0;i<[results count];i++)
    {
        UIImage *image = [UIImage imageNamed:@"nophoto.png"];
        [imagesArray addObject:image];
        bImgExist[i] = NO;
    }
}

  }

Even After releasing my NSXMLParser object instrument still shows memory leak. What I am missing here..

Upvotes: 0

Views: 488

Answers (1)

Jonathan Grynspan
Jonathan Grynspan

Reputation: 43472

self.results = [[NSMutableArray alloc] init];

Properties take ownership (according to their declarations) of their assigned values. So the array you set this property to is retained by self (I'm assuming the property is either retain or copy here), but already has a retain count of +1 from its initialization.

Change the line to:

self.results = [NSMutableArray array];

And the memory leak should clear up.

Upvotes: 3

Related Questions