NSMutableArray destruction
J'ai un tableau NSMutableArray
avec le sourire et des objets. Ces objets vicieusement (fuite) moi chaque fois que j'essaie d'effacer le tableau de tous les objets et repeupler.
Il est alloué dans la fonction init comme
self.list = [NSMutableArray array];
Les différentes méthodes que j'ai utilisé pour la désactiver:
self.list = nil;
self.list = [NSMutableArray array];
et
[self.eventList removeAllObjects];
Explicitement d'allouer et de libérer le tableau ne fonctionne pas non plus. La fuite se produit UNIQUEMENT lorsque j'essaie de réinitialiser la liste.
Ai-je raté une étape lors de la réinitialisation, ou est-ce un autre problème?
source d'informationauteur SageAMDP | 2008-10-07
Vous devez vous connecter pour publier un commentaire.
Comment avez-vous créer les objets que sont les fuites?
Si vous avez fait quelque chose comme ceci:
alors vous aurez fuite de deux objets lorsque la liste est libéré.
Vous devez remplacer le code avec:
Plus en détail:
Si vous suivez le premier modèle, vous avez créé deux objets qui, selon la Cacao en mémoire les règles de gestion de que vous possédez. Il est de votre responsabilité de renoncer à la propriété. Si vous ne le faites pas, l'objet ne sera jamais libéré et vous verrez une fuite.
Vous ne voyez pas de fuite immédiatement, bien que, parce que vous passer les objets de la matrice, ce qui prend également en charge d'eux. La fuite ne seront reconnus que lorsque vous supprimez les objets de la baie ou lorsque le tableau lui-même est libéré. Lorsque l'un de ces événements se produit, le tableau renonce à la propriété des objets et ils vont être de gauche "live" dans votre application, mais vous n'aurez pas toutes les références.
Êtes-vous référant aux objets dans le tableau des fuites?
Comment êtes-vous d'ajouter des objets à la matrice? La matrice de les conserver, si vous avez besoin d'autorelease ou de dégagement après que vous avez ajouté à la matrice. Sinon après le tableau est sorti les objets seront toujours conservés (fui).
quel est votre
@property
déclaration? êtes-vous synthétiser les accesseurs? Si oui, vous devez@property(retain)
. Je suppose que quand vous dites que les objets sont en tournant sur vous, vous faites référence à un core dump(EXC\_BAD\_ACCESS)
.Si la fuite se produit uniquement lorsque vous essayez de réinitialiser la liste, vous avez quelqu'un/quelque chose d'autre à l'aide de ces autres objets que vous avez juste essayé de libération.
Je dirais que je n'ai pas vraiment assez d'Informations pour vous donner une bonne réponse. Dites-vous que la
NSMutableArray
est toujours allouée, mais vide et ne pas avoir tous les objets, mais que les objets une fois auparavant dans le tableau sont toujours attribuées, même si elles doivent être dealloc avais à ce point dans l'application?Si c'est le cas, le tableau pourrait éventuellement être vide, mais vos objets ne sont pas de la manipulation de la dealloc message envoyé à eux, dans ce cas, les objets sont toujours autour de la mémoire mais pas référencés par quoi que ce soit.
Je dirais pour vous aider, je voudrais savoir exactement ce que MallocDebug exactement dit est la fuite. Aussi @Elfred est de donner quelques bons conseils dans la vérification de votre
@property
méthode de la matrice, vraiment, il devrait être de conserver ou de copie.