2010-07-26 4 views
0

Dois-je "libérer" mes objets IU que j'ai déclarés comme IBOutlets avec les attributs de propriété "retain" et "nonatomic"? Je demande parce que j'ai une var UI déclarée comme si ...Dois-je "libérer" mes objets d'interface utilisateur que j'ai déclarés comme IBOutlets avec les attributs de propriété "retain" et "nonatomic"?

@interface MyViewController : UIViewController 
{ 
IBOutlet UILabel *lblStatus; 
} 

@property (retain, nonatomic) IBOutlet UILabel *lblStatus; 

@end 

et mon dealloc comme si ...

- (void)dealloc 
{ 
    //[lblStatus release]; 
    [super dealloc]; 
} 

et avec le var UI lblStatus commentaire, Instruments ne semble pas pour détecter les fuites lorsque j'ouvre la vue de la pile de navigation.

Merci d'avance pour votre aide!

Répondre

0

Puisqu'ils sont conservés, oui, vous êtes responsable de les libérer. Habituellement, avec les contrôleurs de vue, qui devrait se produire dans -viewDidUnload, comme ceci:

- (void)viewDidUnload 
{ 
    self.lblStatus = nil; 
    [super viewDidUnload]; 
} 

(Réglage de la valeur de la propriété, avec une synthèse retain accesseur, libérera l'ancienne valeur avant de la variable d'instance à la nouvelle valeur.)

+0

merci, Noah! si je ne commente pas la déclaration "release" dans ma méthode dealloc, cela suffirait-il aussi? En outre, les réflexions sur les raisons pour lesquelles Instruments ne détecte pas la fuite avec l'instruction "release" ont-elles été commentées? Merci encore. – BeachRunnerFred

+0

Pas exactement. Si votre vue est déchargée et rechargée (par exemple, si votre contrôleur de vue se déconnecte, reçoit un avertissement de mémoire et réapparaît à l'écran plus tard), elle sera rétablie et toute sortie conservée (comme votre étiquette) risque de fuir. –

+0

êtes-vous sûr de cela? –

Questions connexes