Утечка памяти в моем методе - PullRequest
0 голосов
/ 20 января 2012

В моем приложении есть метод для получения RSS-канала, и инструменты показывают, что у меня утечка памяти в моем методе выборки.

NSData* xmlData = [[NSMutableData alloc] initWithContentsOfURL:[NSURL URLWithString: kRSSUrl] ];
NSError *error;

GDataXMLDocument* doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];

if (doc != nil) {
    self.loaded = YES;

    NSArray* items = [[doc rootElement] nodesForXPath:@"channel/item" error:&error];
    NSMutableArray* rssItems = [NSMutableArray arrayWithCapacity:[items count] ];

    for (GDataXMLElement* xmlItem in items) {
        [rssItems addObject: [self getItemFromXmlElement:xmlItem] ];
    }

    [self.delegate performSelectorOnMainThread:@selector(updatedFeedWithRSS:) withObject:rssItems waitUntilDone:YES];



} else {
    [self.delegate performSelectorOnMainThread:@selector(failedFeedUpdateWithError:) withObject:error waitUntilDone:YES];
}
[doc autorelease];
[xmlData release];

Инструменты выбрасывают это:


Leaked Object   #   Address Size    Responsible Library Responsible Frame
Malloc 16 Bytes,4   < multiple >    64 Bytes    appname     -[RSSLoader fetchRss]

РЕДАКТИРОВАТЬ

Мой метод getItemFromXmlElement:

-(NSDictionary*)getItemFromXmlElement:(GDataXMLElement*)xmlItem
{
    return [NSDictionary dictionaryWithObjectsAndKeys:
                          [[[xmlItem elementsForName:@"title"] objectAtIndex:0] stringValue], @"title",
                          [[[xmlItem elementsForName:@"link"] objectAtIndex:0] stringValue], @"link",
                          [[[xmlItem elementsForName:@"description"] objectAtIndex:0] stringValue], @"description",
                          nil];
}

Ответы [ 2 ]

2 голосов
/ 20 января 2012

Запустите «Анализ» вместо обычного «Выполнить» и проверьте свои ошибки.В этом коде нет ошибок (2 init -> 2 release).

0 голосов
/ 21 января 2012

Инструменты не сообщают вам, что эта подпрограмма просочилась, только что один из объектов, созданных в этой подпрограмме, просочился.

Я предполагаю, что массив rssItems, переданный в updatedFeedWithRSS, чрезмерно сохраняется в какой-то момент, либо updatedFeedWithRSS, либо чем-то, что он вызывает. Для проверки этого потребуется опубликовать много кода, и это того не стоит. Просто прочитайте и посмотрите, сможете ли вы найти его.

...