0 votes

Dois-je libérer l'objet temporaire de cet exemple ?

-(IBAction) testTemp: (id) sender{
    id tempObj;
    tempObj = otherObject; //the otherObject will be released in dealloc method;
    [tempObj doSomething];
}

Comme vous pouvez le voir, j'utilise le tempObj pour un usage temporaire. Je ne l'utiliserai plus après que l'utilisateur ait quitté cette méthode, dois-je libérer le tempObj ? et pourquoi ?

0voto

Mark Points 21191

Non, vous n'avez pas besoin de libérer le tempObj. La raison en est que vous ne le conservez pas et que vous n'effectuez aucune gestion de la mémoire. Tout ce tempObj est un pointeur vers l'autreObject et vous l'utilisez simplement comme un alias.

Dans le code, y a-t-il une raison de ne pas utiliser directement otherObject ? Si, dans le code réel, vous avez besoin d'utiliser tempObj, il pourrait y avoir une certaine gestion de la mémoire.

0voto

IlDan Points 4104

TempObj n'est pas un objet. tempObj est une variable. tempObj contient un pointeur vers l'objet et l'affectation tempObj = otherObject fait que otherObject contient le même pointeur.

L'objet est une partie de la mémoire. Chaque objet possède un compteur, le compteur de référence. [tempObj retain] ajoute 1 au compteur de référence, [tempObj release] soustrait 1 au compteur de référence. C'est un moyen de savoir dans combien d'endroits vous utilisez votre objet. Lorsque le compteur atteint 0, l'objet est déclaré mort. Personne ne devrait plus l'utiliser : la portion de mémoire où il vivait sera probablement utilisée par un autre objet.

Vous ne voudrez donc pas libérer otherObject ou tempObj, qui obtiendront le même effet (soustraire 1 au nombre de références de l'objet). Si vous faites cela, le nombre de références pourrait atteindre 0 et le release dans la méthode dealloc causera probablement un crash.

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