我的方法中的内存泄漏

时间:2012-01-20 19:16:37

标签: iphone xcode memory-management memory-leaks instruments

我的应用程序中有一个方法来获取RSS提要,而且乐器显示我的fetch方法中有内存泄漏。

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 个答案:

答案 0 :(得分:2)

运行“分析”而不是通常的“运行”并检查错误。此代码中没有错误(2 init - &gt; 2发行版)。

答案 1 :(得分:0)

仪器没有告诉你这个例程泄露了,只是在这个例程中创建的一个对象泄露了。

我猜是传递给rssItems的{​​{1}}数组在某个时刻被updatedFeedWithRSS或其调用的东西过度保留。我们验证这将需要发布很多代码,这是不值得的。请仔细阅读并查看是否可以找到它。