2011-09-21 2 views
0

J'apprécierais un certain soutien concernant une fuite de mémoire que j'ai.La mémoire fuit lors de la désarchivage

J'ai des données dans un tableau que j'ai archivé avec NSKeyedArchiver. Je l'ai ensuite désarchivé. D'un point de vue fonctionnel, cela fonctionne bien, mais quand je lance Instruments for Memory Leaks, j'ai des fuites de mémoire lors de la désarchivage.

Voici le code:

NSArray *arrayToLoad = [[NSArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:path]]; 

ballPath = [arrayToLoad copy]; 

[arrayToLoad release]; 

Où ballPath est un NSArray. Instruments indique que 100% de la fuite est liée à la première ligne du code ci-dessus. Il me manque clairement quelque chose mais je ne suis pas capable de savoir quoi. Je pense que [NSKeyedUnarchiver unarchiveObjectWithFile: path] est autoeleased et le arrayToLoad est libéré, donc je suis perdu.

Un conseil est apprécié.

+2

Avez-vous libéré le 'ballPath', lorsque vous fini de l'utiliser ? – venj

+1

que faites-vous avec ballPath - c'est retenir count devrait être 1 à la fin de ce code. – bryanmac

Répondre

0

Merci les gars. Je ne fais que lire les valeurs dans ballPath après l'avoir défini avec la copie de arrayToLoad. Toujours pas compris pourquoi j'ai une fuite de mémoire, mais le code ci-dessous fonctionne, même si je ne suis pas en aucune façon fier:

if ([ballPath retainCount] > 0) { 
    [ballPath release]; 
} 

NSArray *arrayToLoad = [[NSArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithFile:path]]; 

ballPath = [[NSArray alloc] initWithArray:arrayToLoad]; 

[arrayToLoad release];