Si j'ai une fonction comme celui-ciautorelease objet précédent par cession
void setSomeObject(SomeObjectClass obj /*, and some other params*/)
{
[_previous autorelease];
_previous = obj;
}
Pour autant que je l'ai compris le message autorelease est envoyé à l'objet lui-même (non _previous) donc à un moment donné, à un moment où setSomeObject sort de la portée de l'objet original est auto-libéré (le cas échéant). Est-ce correct? Je n'utilise pas les propriétés mais je suppose qu'en les utilisant la sortie de l'objet précédent serait automatique quand je le ferais self.previous = obj;?
donc dans un sens, on pourrait aussi écrire [_previous autorelease] mais il n'est pas standard? (bien que vous devez vous assurer qu'il ne pointe pas déjà sur le même objet) – BuggerMe
Oui. Si vous rappelez les règles fondamentales de gestion de la mémoire, tout objet dont vous avez la propriété (acquis par alloc/new/copy/retain) doit être abandonné plus tard (release ou autorelease), donc l'un ou l'autre fonctionnera. Mais dans ce cas, il n'y a pas besoin d'autorelease, puisque vous n'avez pas besoin de faire référence à l'objet dans le reste de la fonction. Une autre façon d'éviter tout cela est d'utiliser regular @property (copier) ou (retainer) avec @synthesize, qui crée des méthodes d'accesseur pour vous, et au lieu de faire tout ce que j'ai écrit dans ma réponse, vous pouvez simplement faire ' self.someObject = obj'. – jtbandes