Je dois être capable de vérifier si j'ai déjà publié une variable dans l'objectif-c. J'ai essayé de vérifier s'il est changé en null: Les résultats étaient les suivants: p> y a-t-il un moyen plus facile de vérifier si elle est traitée si elle est traitée. ? p> p>
4 Réponses :
Habituellement, il ne faut pas avoir besoin de vérifier si un pointeur pointe vers un objet DealLocated: vous devez savoir :) Vos variables em> détiennent simplement une adresse mémoire. Si le contenu de la mémoire que la variable pointe vers est traditionnalisé, la valeur de votre variable (qui contient l'adresse) ne sera pas réglée par magie sur NIL ou NULL.
Donc, vous devriez plutôt repenser votre conception si vous trouvez nécessaire de vérifier si un pointeur pourrait indiquer un espace d'adressage qui a déjà été publié / distribué. P>
Au cours du temps de développement, vous pouvez faire des choses comme activez Nszombies ou utiliser des instruments à trouver où les objets sont alloués ou traités. P>
affaiblissant les pointeurs code> sur OS X 10.7 et ci-dessus et sur iOS 5 et ci-dessus, ils seront automatiquement définis sur < code> nil code> lorsque l'objet référencé est libéré. Voir https://fr.wikipedia.org/wiki/automatic_reference_counting#zeroing_weak_references P >
Après avoir relâché un objet, la valeur de cet objet ne sera pas définie sur nil code>. p>
Calling RetainCount Code> sur l'objet détruit vous donnera un accident ou un autre comportement non défini, pas zéro.
En fait, le résultat le plus probable dans cet échantillon de code particulier est que retentaincount code> retournerait 1 même lorsqu'il a été distribué b>!
Vous voulez probablement dire trafiquant (détruit), non publié. Être publié EM> ne signifie pas être DealLocated em>, c'est le point de référence compté la gestion de la mémoire. Être libéré n'est pas un état, vous ne pouvez pas vérifier pour cela; être détruit est. p>
Si vous voulez dire trafiqué, non, non, il n'y en a pas. Il s'appelle la référence faible em> et l'objectif-c ne les a pas pour le comptage de référence. Lorsqu'un objet est distribué, rien n'est automatiquement effectué aux pointeurs; ils deviennent des pointeurs pendants. P>
Une technique consiste à envoyer l'objet envoyer une notification lors de la répartition, de sorte que tout ce qui détient un pointeur peut le réinitialiser à NIL. P>
Généralement, vous devez concevoir votre programme d'une manière dont aucun pointeur d'objet n'est utilisé à nouveau après que vous avez appelé version code> dessus. Dans le code de l'exemple que vous avez donné, vous ne devez pas utiliser code> BuildView code> pour autre chose, sauf attribution d'une nouvelle valeur. P>
Il convient de noter que, à des fins historiques, cette réponse n'est plus correcte. Objective-C a des références faibles et, en fait, cela a toujours fait, avec suffisamment de piratage d'exécution. Cependant, pour la version officielle, ils ont besoin d'iOS 5 et de plus.
Merci à "Cocoa avec amour" Vous pouvez essayer ceci p>
http: //www.cocoawithlove. COM / 2010/10 / test-if-arbitraire-pointeur-est-valide.html p>
Ce que vous semblez demander n'est pas si l'objet a été libéré, mais plutôt si cela a été distribué.
duplicail possible de Comment déterminer si j'ai un Pointeur à un objet libéré?