J'ai commencé à tester mon application dans Instruments pour nettoyer les fuites de mémoire. J'ai été capable d'effacer toutes les fuites de mémoire, sauf celles liées aux données de base. Instruments me pointe toujours à cette section de code:Fuites de mémoire de données de base
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error
}
Je déclare la managedObjectContext dans mon fichier d'en-tête avec le code suivant:
@interface UpperBody : UITableViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView *upperTable;
NSMutableArray *exercises;
NSManagedObjectContext *managedObjectContext;
}
@property (nonatomic, retain) NSMutableArray *exercises;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
je libère le managedObjectContext dans le (vide) section dealloc. Voici la section complète du code en utilisant la managedObjectContext:
- (void)loadExercises {
if (managedObjectContext == nil) {
managedObjectContext = [(iFitAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Exercises" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"category == 1"];
[request setPredicate:predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"exerciseName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil) {
// Handle the error
}
[self setExercises:mutableFetchResults];
// [exercises addObject:@"Add Exercise"];
NSLog(@"Count of exercises %i", exercises.count);
[mutableFetchResults release];
[request release];
[self.tableView reloadData];
}
Tout conseil sur ce qui pourrait être à l'origine des fuites serait grandement apprécié! Merci d'avance!
Est-ce que vous libérez des 'exercices' dans votre méthode' dealloc'? – albertamg
Oui, je libère des exercices dans ma méthode dealloc. =/Je ne suis pas sûr pourquoi Instruments pointe vers le NSMutableArray * mutableFetchResults cependant. Je publie managedObjectContext, results et mutableFetchRequests. –
Les instruments pointent vers l'emplacement de l'objet divulgué, et non là où il a été divulgué. – albertamg