2009-11-06 4 views
0

J'ai un problème de fuite de mémoire, je sauve un tableau dans un fichier en utilisant:NSKeyedUnarchiver causant fuite de mémoire

[NSKeyedArchiver archiveRootObject:myArray toFile:MyFile]; 

les objets inclus dans le tableau les méthodes suivantes:

- (id)initWithCoder:(NSCoder *)coder 
{ 

[super init]; 

parameter1 = [[coder decodeObject] retain]; 
parameter2 = [[coder decodeObject] retain]; 
parameter3 = [[coder decodeObject] retain]; 

return self; 
} 

- (void)encodeWithCoder:(NSCoder *)coder 
{ 
[coder encodeObject:parameter1]; 
[coder encodeObject:parameter2]; 
[coder encodeObject:parameter3]; 
} 

pour désarchiver les objets que je utilise:

myUnarchivedArray = [NSKeyedUnarchiver unarchiveObjectWithFile:myFile]; 

l'application se bloque soudainement parce que les mem disponibles ory ne suffit pas pour continuer.

Je suis incapable de libérer monUnarchivedArray et l'outil Intruments me dit que l'unarchiver provoque la fuite de mémoire.

Je ne l'ai pas trop effectue une recherche, je viens de trouver la cause de la fuite de mémoire, mais je sautillait de trouver quelqu'un qui a été passé le même problème et a une astuce pour le résoudre. :)

Je vous remercie!! Anna

+0

Quelle est la taille de ces objets? – mahboudz

+0

32 octets aprox, mais la quantité d'entre eux à l'intérieur du tableau est variable. –

+0

Les objets que vous encodez/décodent sont-ils des types personnalisés? Si c'est le cas, passez en revue leurs méthodes d'encodage/décodage. – nall

Répondre

-1

Vous conserver vos objets dans initWithCoder bien que la documentation indique:

la mise en œuvre de NSKeyedUnarchiver, cependant, retourne un objet autoreleased, de sorte que sa vie est la même que la piscine actuelle autorelease au lieu du désarchiver à clé.

+0

-1 La vie de l'objet est la même que celle en cours autorelease pool, * à moins que cet objet ne soit conservé *. Ceci est la gestion de la mémoire * standard * Objective-C –

+0

Qu'est-ce qui vous fait penser que cette propriété est équilibrée par une version? – diciu