J'ai quelques difficultés à tenter de supprimer une fuite de mémoire de mon code. Dans le code ci-dessous, j'obtiens une fuite de mémoire sur la ligne "configurationArray = [[NSArray arrayWithContentsOfFile: controllerConfigurationFilePath] retain];" Cependant, lorsque j'enlève la retenue, l'application se bloque et la modification de la retenue à une autorelease provoque également un crash.Fuite de mémoire avec une matrice - objectif c
merci, William
-(NSArray*)decodeConfigurationFile:(NSString*)fileName{
NSArray* configurationArray = [[NSArray alloc] init];
NSString *controllerConfigurationFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"];
if (controllerConfigurationFilePath != nil) {
// returns array of items storing the data for form
configurationArray = [[NSArray arrayWithContentsOfFile:controllerConfigurationFilePath] retain];
}
// returns fields dictionary objects from plist into an array
return [[configurationArray objectAtIndex:0] objectForKey:@"fields"];
}
Merci pour la réponse rapide. J'ai mis en place les changements décrits ci-dessus. Et fait en sorte que la variable ("champs") à laquelle le tableau retourné est assigné a un conserver. Cependant quelque part dans mon code cette variable est effacée et quand je tente de l'utiliser, elle plante. Je pense que cela peut avoir quelque chose à faire avec ne pas conserver ce "[NSArray arrayWithContentsOfFile: controllerConfigurationFilePath]" et puis essayer de l'utiliser avec cette déclaration: "[[fields objectAtIndex: index] objectForKey: @" costAtHour "]; – williamb
Une enquête plus approfondie, m'a montré que je n'utilisais pas self.fields lors de l'accès à cette propriété et c'est ce qui a causé le crash. Merci – williamb
il peut être utile de voir l'entrée .plist pour le dictionnaire 'fields' impliqué par l'appel. – falconcreek