可可触摸的内存泄漏与mutableCopy

al1*_*1nk 1 iphone cocoa-touch memory-leaks objective-c nsmutablearray

我正在尝试解决内存泄漏,但我找不到任何解决方案.

仪器表示此方法存在泄漏:

 - (void)refreshData {

 Sn0werSp33dAppDelegate *appDelegate = [[Sn0werSp33dAppDelegate alloc] init];
 NSFetchRequest *coreDataNewsFetchRequest = [[NSFetchRequest alloc] init];
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"News" inManagedObjectContext:managedObjectContext];

 [coreDataNewsFetchRequest setEntity:entity];

 self.managedObjectContext = appDelegate.managedObjectContext;
 self.newsArray = [[managedObjectContext executeFetchRequest:coreDataNewsFetchRequest error:nil] mutableCopy];//Intruments says that here is the memory leak :(


 [appDelegate release];
 [coreDataNewsFetchRequest release];
 [entity release];
}
Run Code Online (Sandbox Code Playgroud)

newsArray 在我的.h中声明为NSMutableArray,它有一个属性: @property (nonatomic, retain) NSMutableArray *newsArray;

我尝试了很多东西,但在任何时候,事情都没有用.我正在使用iPhone SDK 4.2.1和Instruments 2.7运行XCode 3.2.5.

mru*_*ueg 12

当你这样做

self.newsArray = something; 
Run Code Online (Sandbox Code Playgroud)

something被保留,因为你添加retainnewsArray属性.

但是mutableCopy也返回一个保留计数增加1的对象.因此,在该方法完成后,您newsArray的保留计数比您真正想要的高一个,这是检测到的内存泄漏.

解决方法:更换,你分配线self.newsArray

self.newsArray = [[[managedObjectContext executeFetchRequest:coreDataNewsFetchRequest error:nil] mutableCopy] autorelease];
Run Code Online (Sandbox Code Playgroud)