簡體   English   中英

可變數組泄漏,即使釋放

[英]Leak with Mutable Array even when released

儀器指向這條線說這里有泄漏

- (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

有人可以給我一個正確的方向嗎? 還是這個泄漏的答案,我無法解決:)

泄漏工具只能指向已分配內存的位置,在您通過以下代碼從數組傳遞每個對象的某些屬性時,可能正在發生泄漏:

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

您需要檢查使用favouriteInfoWithClientId:favorite的參數會發生什么-如果保留其中任何一個參數,那么將會泄漏...

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM