Leak with Mutable Array even when released
Instruments point to this line saying there is a leak here
- (void) loadFavoriteData {
TradePortMobileAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
NSManagedObjectModel *objectModel = [[con开发者_Go百科text persistentStoreCoordinator] managedObjectModel];
Session *session = delegate.session;
NSDictionary *param = [NSDictionary dictionaryWithObjectsAndKeys: [session objectForKey:@"CTY_CODE"], pCOUNTRY, nil];
NSFetchRequest *fetchRequest = [objectModel fetchRequestFromTemplateWithName:@"fetchAllFavorites" substitutionVariables:param];
[fetchRequest setSortDescriptors: self.dataSorter];
NSError *error;
//THIS IS THE LINE INSTRUMENT SAYS THERE IS A LEAK!!!!!
NSMutableArray *favorites = [[context executeFetchRequest:fetchRequest error:&error] mutableCopy];
if ([favorites count] > 0) {
[self.favoriteList removeAllObjects];
for (NSInteger i=0; i < [favorites count]; i++) {
FavoriteData *favorite = [favorites objectAtIndex: i];
if (i < vMaxRecordsInCoreData) {
[self.favoriteList addObject:[FavoriteInfo favoriteInfoWithClientId:favorite.clientId withName:favorite.name
withAddress:favorite.address
withPhone:favorite.phone
withEmail:favorite.email
withCountry:favorite.country
withLtpId:favorite.ltpId
withUpdateTimestamp:favorite.updateTimestamp
withNoOfDetails:favorite.noOfDetails]];
}
else {
[context deleteObject:favorite];
}
}
if (![context save:&error]) {
NSLog(@"deleting excess favorites failed.");
}
self.navigationItem.leftBarButtonItem.enabled = YES;
}
else {
[self.favoriteList removeAllObjects];
self.navigationItem.leftBarButtonItem.enabled = NO;
}
[favorites removeAllObjects];
[favorites release];
}
This is the stack
0 CoreFoundation _CFRuntimeCreateInstance
1 CoreFoundation __CFStringCreateImmutableFunnel3
2 CoreFoundation CFStringCreateWithCString
3 CoreData -[NSSQLCore _prepareResultsFromResultSet:usingFetchPlan:withMatchingRows:]
4 CoreData -[NSSQLCore _newRowsForFetchPlan:selectedBy:withArgument:]
5 CoreData -[NSSQLCore newRowsForFetchPlan:]
6 CoreData -[NSSQLCore objectsForFetchRequest:inContext:]
7 CoreData -[NSSQLCore executeRequest:withContext:error:]
8 CoreData -[NSPersistentStoreCoordinator executeRequest:withContext:error:]
9 CoreData -[NSManagedObjectContext executeFetchRequest:error:]
MY CODE HERE--->10 TradePortMobile -[FavoritesTableViewController loadFavoriteData] /Users/aldrich/Projects/iPhone/Classes/FavoritesTableViewController.m:281
11 TradePortMobile -[FavoritesTableViewController viewWillAppear:] /Users/aldrich/Projects/iPhone/Classes/FavoritesTableViewController.m:54
12 UIKit -[UINavigationController viewWillAppear:]
13 UIKit -[UITabBarController transitionFromViewController:toViewController:transition:shouldSetSelected:]
14 UIKit -[UITabBarController transitionFromViewController:toViewController:]
15 UIKit -[UITabBarController _setSelectedViewController:]
16 UIKit -[UITabBarController _tabBarItemClicked:]
17 UIKit -[UIApplication sendAction:to:from:forEvent:]
18 UIKit -[UITabBar _sendAction:withEvent:]
19 UIKit -[UIApplication sendAction:to:from:forEvent:]
20 UIKit -[UIControl sendAction:to:forEvent:]
21 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:]
22 UIKit -[UIControl sendActionsForControlEvents:]
23 UIKit -[UIApplication sendAction:to:from:forEvent:]
24 UIKit -[UIControl sendAction:to:forEvent:]
25 UIKit -[UIControl(Internal) _sendActionsForEvents:withEvent:]
26 UIKit -[UIControl touchesEnded:withEvent:]
27 UIKit -[UIWindow _sendTouchesForEvent:]
28 UIKit -[UIApplication sendEvent:]
29 UIKit _UIApplicationHandleEvent
30 GraphicsServices PurpleEventCallback
31 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__
32 CoreFoundation __CFRunLoopDoSource1
33 CoreFoundation __CFRunLoopRun
34 CoreFoundation CFRunLoopRunSpecific
35 CoreFoundation CFRunLoopRunInMode
36 GraphicsServices GSEventRunModal
37 GraphicsServices GSEventRun
38 UIKit UIApplicationMain
39 TradePortMobile main /Users/aldrich/Projects/iPhone/main.m:14
40 TradePortMobile start
May somebody give me a push to the right direction? or an answer to this leak i can not solve :)
The leak tool can only point to where the memory has been allocated, the leak is probably happening as you are passing some of the properties of each object from the array in the following code:
[self.favoriteList addObject:[FavoriteInfo favoriteInfoWithClientId:favorite.clientId withName:favorite.name
withAddress:favorite.address
withPhone:favorite.phone
withEmail:favorite.email
withCountry:favorite.country
withLtpId:favorite.ltpId
withUpdateTimestamp:favorite.updateTimestamp
withNoOfDetails:favorite.noOfDetails]];
you need to check what happens with the parameters of favoriteInfoWithClientId:favorite - if you retain any of these then you will have a leak...
hope this helps
精彩评论