2012-01-20 13 views
0

私のアプリでは、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] 

EDIT

マイ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]; 
} 
+0

メソッドのポストコード 'getItemFromXmlElement' – Nekto

+2

Instrumentsでは、このルーチンがリークしたことを通知していないことに注意してください。このルーチンで作成されたオブジェクトの1つだけがリークしました。私の推測では、updatedFeedWithRSSに渡されたrssItems配列は、updatedFeedWithRSSか何かによって呼び出されることによって、ある時点で過剰保持されています。 –

+0

Thanks Steven、updatefeedWithRssのアイテムをリリースするのを忘れてしまったのですが、これは見たことがないでしょう、ありがとうございます! – coderjoe

答えて

0

このルーチンがリークしたことを示すものではなく、このルーチンで作成されたオブジェクトの1つだけがリークしたことを示しています。

updatedFeedWithRSSまたはそれが呼び出したものによって、updatedFeedWithRSSに渡されたrssItems配列がある時点で過剰保持されていると思います。これを確認するには、投稿と多くのコードが必要です。それは価値がありません。ちょうど読んで、あなたがそれを見つけることができるかどうかを見てください。

2

ランの代わりに通常の "ファイル名を指定して実行" "分析" し、あなたにエラーをチェックします。このコードにはエラーはありません(2 init - > 2リリース)。

+0

私もエラーがなかったと思っています。確認のおかげで、私は分析をチェックします。 – coderjoe

関連する問題