I’m trying to resolve a memory leak but I can’t find any solution.
Instruments says that there is a leak in this method:
- (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];
}
newsArray is declared in my .h as an NSMutableArray and it has a property:
@property (nonatomic, retain) NSMutableArray *newsArray;
I’ve tried many things but at all times, that things weren’t working.
I’m running XCode 3.2.5 with iPhone SDK 4.2.1 and Instruments 2.7.
When you do
that
somethingis retained, because you addedretainto thenewsArrayproperty.But
mutableCopyalso returns an object with a retain count increased by 1. So after the method finishes, yournewsArrayhas a retain count one higher than what you really want, which is the memory leak that was detected.Solution: Replace the line where you assign
self.newsArraywith