私のアプリでは、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];
}
メソッドのポストコード 'getItemFromXmlElement' – Nekto
Instrumentsでは、このルーチンがリークしたことを通知していないことに注意してください。このルーチンで作成されたオブジェクトの1つだけがリークしました。私の推測では、updatedFeedWithRSSに渡されたrssItems配列は、updatedFeedWithRSSか何かによって呼び出されることによって、ある時点で過剰保持されています。 –
Thanks Steven、updatefeedWithRssのアイテムをリリースするのを忘れてしまったのですが、これは見たことがないでしょう、ありがとうございます! – coderjoe