39 votes

Différence entre release et dealloc en Objective-C

Lors de la désallocation d'une référence, j'ai vu release y dealloc utilisé par exemple

-(void)dealloc
{
  [foo release];
  [nar dealloc];

  [super dealloc];
}

Ma question est la suivante : quand est-ce que release à utiliser et quand est ce que dealloc à utiliser ?

Gracias

54voto

Chuck Points 138930

Ne jamais appeler dealloc à l'exception de [super dealloc] à la fin de la section dealloc méthode. La méthode release renonce à la propriété d'un objet. Lorsqu'un objet Cocoa n'a plus de propriétaire, il peut être désalloué - dans ce cas, il recevra automatiquement un message d'erreur dealloc message.

Si vous voulez programmer Cocoa, vous devez lire la section Lignes directrices pour la gestion de la mémoire . C'est incroyablement simple une fois que vous avez franchi la première étape, et si vous ne comprenez pas ce que contient ce document, vous serez confronté à de nombreux bogues subtils.

2voto

Abizern Points 52378

Les dealloc dans votre exemple est appelée lorsque le nombre de conservations de l'objet devient nul (par l'envoi d'un message de libération par un objet).

Lorsqu'il n'est plus nécessaire, il se nettoie en envoyant un release aux objets qu'il retient.

1voto

Vadoff Points 1506

Vous n'êtes jamais censé appeler dealloc explicitement (sauf si c'est [super dealloc] dans la méthode dealloc, mais c'est la seule exception). L'Objective-C gère la mémoire via le comptage de références, vous êtes donc simplement supposé faire correspondre vos allocs/retains avec des releases/autoreleases et laisser l'objet se déconstruire de lui-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X