2010-12-15 84 views
0

Quelqu'un peut-il m'aider ici? Nouveau en tant que développeur iPhone. Je reçois une fuite de mémoire dans les données de base, et je ne vois pas comment y remédier. Je cours cette méthode plusieurs fois dans un UIViewController (je ne suis pas en utilisant le tableau Viiew):Fuite de mémoire dans les données de base

-(void)fetchEvents: (NSString *) predicateSearch localEvent:thisEvent { 
    NSManagedObjectContext *context = [thisEvent managedObjectContext]; 

    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [thisEvent entity]; 
    [request setEntity:entity]; 

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
    [request setSortDescriptors:sortDescriptors]; 

    [sortDescriptors release]; 
    [sortDescriptor release]; 

    // Predicate for main screen 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"type matches %@", predicateSearch]; 
    [request setPredicate:predicate]; 

    NSError *error; 
    NSArray *fetchResults = [context executeFetchRequest:request error:&error]; 

    if (fetchResults == nil) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    } 

    [self setMyPhotoEventsArray:fetchResults]; 

    [request release]; 

} // fetchEvents 

Et je reçois ces fuites de mémoire dans Instruments :!

Leaked Object # Address Size Responsible Library Responsible Frame 
_PFArray 3 <multiple> 96 CoreData -[NSSQLCore _prepareResultsFromResultSet:usingFetchPlan:withMatchingRows:] 

Leaked Object # Address Size Responsible Library Responsible Frame 
GeneralBlock-32 2 <multiple> 64 CoreData PF_ALLOCATE_OBJECT_ARRAY 

La méthode fonctionne très bien, mais je continue à obtenir ces fuites

Répondre

0

Il est difficile de dire de ce que vous montrez ici, mais voici une supposition:

[auto setMyPhotoEventsArray: fetchResults] conserve probablement "fetchResults", puis dans le dealloc et viewDidUnload du View Controller, vous pouvez oublier de les libérer. En tant que tel, lorsque le contrôleur de vue est fermé, la référence à la matrice est perdue et vous avez une fuite.

+0

Merci pour votre réponse. Je vais examiner cela, la partie qui me trouble est d'obtenir toutes ces fuites de données de base. – Wilmer