2010-11-25 65 views
1

儀器指向這一行說有這裏泄漏與可變數組釋放

- (void) loadFavoriteData { 
    TradePortMobileAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    NSManagedObjectContext *context = [delegate managedObjectContext]; 

    NSManagedObjectModel *objectModel = [[context 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]; 

} 

泄漏,即使這是堆棧

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 

五月有人給我推到正確的方向?或回答這個泄漏我無法解決:)

回答

1

泄漏工具只能指向內存已分配的位置,泄漏可能發生,因爲您正在傳遞數組中的每個對象的一些屬性下面的代碼:

[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]]; 

你需要檢查與favoriteInfoWithClientId的參數會發生什麼:最喜歡的 - 如果你保留任何這些,那麼你將有一個泄漏...

希望這有助於

+0

謝謝,我會考慮它 – Aldrich 2010-11-25 10:31:41