Question

Je fais un peu d'archivage à une liste de propriétés et quand je désarchiver mes données à l'aide NSKeyedUnarchiver je trouve que mon application se bloque si je libère l'objet par la suite. Je me demandais si le message finishDecoding autoreleases également l'objet. Il semble étrange que ça plante quand je le libère.

Était-ce utile?

La solution

Qu'est-ce que vous relâchiez? NSKeyedUnarchiver ou objet désarchivée?

Si vous libérer NSKeyedUnarchiver ou non dépend de la façon dont vous l'avez créé. Il suit les règles habituelles. Si vous utilisez alloc + initForReadingWithData vous devez libérer, si vous utilisez unarchiveObjectWithData ou unarchiveObjectWithFile -. Vous ne devriez pas

En ce qui concerne la suite de decodeObjectForKey, il suit également la règle habituelle qui retourne la méthode objet autoreleased et vous ne devriez pas le libérer à moins que vous le retenaient explicitement.

En ce qui concerne finishDecoding: vous êtes censé appeler explicitement avant l'objet NSKeyedUnarchiver est libéré. Vous ne devriez pas utiliser Unarchiver après ce point, mais l'objet est encore en vie.

Autres conseils

Si vous initialisez le Unarchiver avec

[[NSKeyedUnarchiver alloc] initForReadingWithData:data]

Ensuite, vous êtes responsable de la libération quand yo avez terminé désarchivage.

Si cela se briser après avoir relâché, alors il est probable que votre bug est ailleurs. Probablement parce que vous utilisez des objets que votre Unarchiver fournit sans les retenir. Et quand le Unarchiver est désallouée, il libère les objets qui ont fourni pour vous. Si vous ne l'avez pas retenu ces derniers, ils seront désallouées et vous planter lorsque vous faites référence à ces objets.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top