Bonjour,
Je travaille actuellement sur une petite appli iPhone et je traque actuellement les leaks que j'ai.
En cherchant leur raison je suis tombé sur cette page: http://stackoverflow.com/questions [...] bjective-c
Où il est dit que ce code:
Code :
- self.aController = [[AController alloc] init];
- ...
- [self.aController release];
|
Cause du leak, car à la fois "[AController alloc]" et "self.aController =" incrémentent le compteur de référence de l'objet du fait de la propriété "retain" de self.aController. Donc qu'après le release il reste à 1, et l'objet n'est pas réellement libéré.
La solution serait donc de passer par un pointeur temporaire:
Code :
- AController *tempAController = [[AController alloc] init];
- self.aController = tempAController;
- [tempAController release];
- ...
- [self.aController release];
|
Mais cela me paraît étrange. Tout ça rendrait au final la gestion de la mémoire plus compliquée qu'un simple new/delete sans ramasse miettes, en créant un genre de shared_ptr mal géré puisque l'on doit explicitement déclarer la fin de vie d'une référence.
Ai-je mal compris quelquechose?