2012-04-03 5 views
0

Dans mon application iPad,Quand libérer des objets créés dynamiquement

J'ai une classe personnalisée héritée de UIButton.

J'ajoute dynamiquement les boutons de ma vue principale en utilisant la boucle for.

Ce bouton a également une étiquette.

Mon problème est de savoir quand libérer les objets de la classe personnalisée.

for(NSMutableDictionary *dict in Categories) 
{ 

Category *category=[[Category alloc] initWithName:[dict valueForKey:@"category_name"] identity:[[dict valueForKey:@"category_id"] intValue] imageName:nil]; 

category.lblimagesCount=[[UILabel alloc] initWithFrame:CGRectMake(category.frame.size.width-31, category.frame.origin.y-42, 26, 26)]; 

[category addSubview:category.lblimagesCount]; 

[self.viewHeader addSubview:category]; 

[category release]; 
category=nil; 

} 

Comment éviter les fuites de mémoire. Spécialement pour 1. Étiquettes 2. Catégorie.

Où écrire sa publication?

i. La classe de catégorie (UIButton) a sa méthode dealloc mais elle n'est jamais appelée.

ii. Comme je le relâche immédiatement après l'avoir ajouté à la sous-vue, cela affectera-t-il mon clic sur le bouton.

iii. Quand devrais-je libérer les étiquettes?

Très confus au sujet de la gestion de la mémoire.

Répondre

3

Je vais répondre à vos questions:

i. La classe de catégorie (UIButton) a sa méthode dealloc mais elle n'est jamais appelée. Parce qu'il n'est pas totalement libéré, voir la question ii.

ii. Comme je le relâche immédiatement après l'avoir ajouté à la sous-vue, cela affectera-t-il mon clic sur le bouton. Non, parce que votre sous-vue est maintenant le propriétaire du bouton, lorsque vous l'ajoutez à la sous-vue, vous et la sous-vue êtes propriétaires, lorsque vous relâchez, le bouton appartient maintenant à la sous-vue.

iii. Quand devrais-je libérer les étiquettes? Dès que vous ajoutez à la sous-vue, pour la même raison que la question ii.

Je serai heureux de préciser si vous ne le comprenez pas.

+0

@Antoonio Comment l'étiquette sera-t-elle associée à la catégorie? –

+0

Parce qu'Antonio ce qui se passe que si je libère les étiquettes après l'avoir ajouté aux sous-vues, je ne peux pas le modifier plus loin dans le code. Comme les étiquettes ne reflètent pas les changements. –

+0

Comme je l'ai déjà lu lorsque vous ajoutez une sous-vue, votre vue n'appartient pas à l'ensemble des propriétés de votre objet. –

Questions connexes