Je vois beaucoup de code Objective-C qui a la syntaxe suivante lors de la tentative de libérer des objets de la mémoire quand ils ne sont plus nécessaires.
[controller release], controller = nil;
4 Réponses :
Étant donné que l'envoi d'un message à un objet NIL est une opération valide dans l'objectif-C (rien ne se passe), définir un pointeur d'objet sur NIL empêche les mauvaises choses de se produire si l'objet est envoyé un message après sa publication. p>
appeler Donc, vous pourriez libérer votre objet, mais vous pourriez toujours le montrer. Et puis cela pourrait être autorisé. Et puis vous l'envoyez un message - mais peut-être que l'objet est des ordures maintenant. C'est mauvais. P>
Définition de votre pointeur à NIL après la relâche Cela signifie que vous ne pouvez pas envoyer de message à un objet gaspillé. Vous avez terminé avec cet objet et vous pouvez dire tout ce que vous voulez version code> sur un objet ne signifie pas nécessairement que cela va être libéré. Il s'agit simplement de la retenue du retenue de l'objet. Ce n'est pas avant que le nombre de retenue atteigne 0 que l'objet soit libéré (et même à ce moment-là, l'objet peut être dans une piscine d'autorégulation et toujours ne pas être libéré tout à fait). P>
nil code>, pas de mal fait. P>
En plus des autres réponses, il est commun dans de nombreuses langues pour définir des objets libérés sur nil code>, en particulier lorsque les objets ne sont pas complètement locaux (peut-être des membres d'un autre objet). Cela vous permet de vérifier facilement et de voir si un objet a été publié auparavant afin que vous puissiez le créer à nouveau si nécessaire. P>
Deux choses p>
Offloc CODE> Objet.
Je pense que c'est une mauvaise chose cependant, car vous obtenez probablement probablement un bug ou une faiblesse conceptuelle dans le code de cette façon.
Si, sur l'autre main, l'objet que vous venez de publier dépend de la portée ou de ne plus être utilisé à nouveau, cette affectation sera supprimée par le compilateur lors de l'optimisation, de toute façon. LI>
- dans un environnement collecté à la poubelle, envoi
version code> à un objet n'a aucun effet .
En fonction de qu'est-ce que em> vous faites et où vous le faites em>, définissez le pointeur d'objet à Nil mai em> faire la différence si le GC récoltera la objet ou non.
Donc, sans l'affectation, l'objet peut-il vivre em> vivre et bloquerait non seulement les ressources, mais comme il est pleinement vivant et valide, peut em> produire des effets secondaires parasites. Li>
ul>