2010-07-30 5 views
1

J'ai un mutableArray que je remplis d'objets. Lorsque j'essaie de remplir le tableau, j'utilise d'abord removeAllObjects - qui produit une fuite de mémoire ...NSMutableArray - removeallobjects produit une fuite

Les propriétés de l'objet sont synthétisées, conservées et libérées sur dealloc.

Le tableau est initialisé sur viewDidLoad comme ceci:

theArray = [[NSMutableArray alloc] initWithCapacity:10]; 

... et il est conservé et synthétisé. (@property (nonatomic, retain) NSMutableArray *theArray)

Je suis d'ajouter les objets dans un comme celui-ci en boucle:

myObject *theObject = [[myObject alloc] init]; 

theObject.someProperty = @"theprop"; 

[theArray addObject: theObject]; 

[theObject release]; 

puis sur le prochain appel de la méthode, je supprime tous les objets comme celui-ci:

[theArray removeAllObjects]; 

C'est là que la fuite se produit. Si je commente cette ligne, la fuite n'apparaît pas. Donc je suppose que je fais quelque chose de mal dans mon objet?

+0

Y a-t-il une fuite si vous venez d'instancier myObject et de le libérer ensuite? – aepryus

Répondre

1

Est-ce que myObject a des propriétés conservées? Si oui, les mettez-vous à zéro dans le message de dealloc? Sinon, lorsqu'il est libéré, il ne libère pas les objets auxquels ses propriétés sont définies.

+0

oui - les propriétés de l'objet sont conservées. Et j'utilise la version dans le dealloc .h @property (nonatomic, retain) NSString * someProperty; .m @synthesize someProperty; - (void) dealloc { [libération someProperty]; [super dealloc]; } – Urs

2

On dirait que le problème est résolu ...

a) Je ne savais pas, que lorsque j'utilise des instruments, l'application n'est pas compilé avant le lancement - ainsi, quelques-uns des changements que je n'étaient pas faits prenant effet, lors de l'utilisation d'instruments. Alors maintenant, je construis et exécute d'abord après un changement et puis l'exécuter dans les instruments. B) Ainsi, je ne sais pas vraiment ce qui a résolu le problème. Mais peut-être que j'avais la méthode dealloc dans mon objet mal. j'utilisais:

[super dealloc]; 

[myProperty release]; 

au lieu de l'inverse:

[myProperty release]; 
[super dealloc]; 

Merci pour l'aide, bien que!

Questions connexes