2011-05-17 5 views
0

Je viens de terminer l'exécution de mon application à l'aide d'instruments et je fuis _NSCFDictionaries hors de contrôle. Je n'ai pas de @property configuré pour workoutArray car il s'agit d'une variable d'instance privée.Fuite de mémoire initWithContentsOfFile

NSString *Path = [[NSBundle mainBundle] bundlePath]; 
NSString *DataPath = [Path stringByAppendingPathComponent:@"data.plist"]; 
NSArray *rawDump = [[NSArray alloc] initWithContentsOfFile:DataPath]; 
workoutArray = [[NSMutableArray alloc] init]; 

for (NSDictionary *dict in rawDump){ 
    [workoutArray addObject: dict]; 
} 

[rawDump release]; 

Je libère workoutArray dans -dealloc

- (void)dealloc { 
[workoutArray release]; 
[managedObjectContext release]; 
[df release]; 
[super dealloc]; 

}

Toute aide est très appréciée.

+0

Est-ce que c'est dans un fil? Vous pourriez avoir besoin d'un NSAutoreleasePool. –

+0

Ce code est-il appelé plusieurs fois? – Eiko

+0

Êtes-vous sûr de ne pas utiliser la méthode deux fois (ou plus)? – Roman

Répondre

3

Comme vous indiquez que vous exécutez cette opération plus d'une fois (sur la même instance), le problème est que vous réaffectez votre workoutArray sans libérer l'ancien objet. Vous devez release l'ancien objet avant réaffectant:

[workoutArray release]; 
workout Array = [[NSMutableArray alloc] init]; // etc. 

Comme workoutArray comme Ivar est nul par défaut sur la première fois, cela devrait toujours fonctionner correctement.

+0

grands Merci! J'ai besoin de rafraîchir ma gestion de la mémoire :) – iOSDevSF