2010-12-07 34 views
0

L'instrument Leaks sonne l'alarme sur un code, mais je ne sais pas comment traiter la fuite sans écraser l'application. Voici un code résumant mon approche, écrit il y a quelque temps et clairement dans le besoin de repenser:Comment puis-je gérer une fuite de mémoire Subview?

labels = [[NSMutableArray alloc] init]; 

for(int i = 0; i < 10; i++) { 
    // calculate x and y... 
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)]; 
    // customize label... 
    [labels addObject:label]; 
    [label release]; 
    [self addSubview:[labels objectAtIndex:i]]; 
} 

Pourquoi prendre la peine avec les étiquettes NSMutableArray? Plus tard, dans d'autres méthodes, je dois changer l'alpha des étiquettes, et il est commode de pouvoir dire

[[labels objectAtIndex:num] setAlpha:0.5]; 

Je crois que la fuite se produit parce que les étiquettes ne sont pas dealloc'ed au cours du cycle de vie normal de l'application , seulement quand la vue supérieure est libérée à la fermeture.

Aide!

Merci.

Répondre

0

Cela se produit probablement parce que vous ne libérez pas le tableau des étiquettes. Qu'en est-il de libérer le tableau des étiquettes après la boucle for, puis en utilisant .tag pour définir l'étiquette sur l'UIView et trouver l'étiquette plus tard via le .tag en utilisant viewWithTag pour définirAlpha?

labels = [[NSMutableArray alloc] init]; 

for(int i = 0; i < 10; i++) { 
    // calculate x and y... 
    label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 70, 15)]; 
    label.tag = 100; 
    // customize label... 
    [labels addObject:label]; 
    [label release]; 
    [self addSubview:[labels objectAtIndex:i]]; 
} 

[labels removeAllObjects]; 
[labels release]; 

Puis, plus tard

(UILabel*) [[self.view viewWithTag:100] setAlpha:0.5]; 
+0

je suis allé encore plus loin que cette approche - a décidé de ne pas déranger avec un tableau des étiquettes et étiquettes simplement ajouté en tant que sous-vue avec tag = 100 + i, puis il a publié, dans chaque itération de la boucle. – ed94133