Quelqu’un peut-il expliquer les différences entre free()
, release
, autorelease
et dealloc
?
free()
est une fonction C que vous utilisez pour vous débarrasser de la mémoire dont vous n’avez plus besoin, obtenue via malloc()
ou d’une autre fonction documentée exigeant que free () libère sa mémoire, par exemple strdup()
.
-dealloc
est un sélecteur Objective-C envoyé par le runtime Objective-C à un object lorsque celui-ci n’appartient à aucune partie de l’application.
-release
est le sélecteur que vous envoyez à un object pour indiquer que vous abandonnez la propriété de cet object. Lorsqu’un object n’appartient à personne, le message -dealloc
lui est envoyé par le moteur d’exécution.
-autorelease
est un sélecteur que vous envoyez à un object pour indiquer que vous en abandonnez la propriété. Cependant, si personne n’a plus l’object, l’object final -dealloc
sera différé jusqu’à un point ultérieur non précisé. En fait, ce que vous êtes en train de faire est de transférer votre propriété dans un pool de libération automatique qui le libérera ensuite lorsqu’il sera lui-même libéré (ou drainé).
Vous ne devez jamais envoyer -dealloc
à un object, sauf à super
dans la propre méthode -dealloc
l’object.
Parmi les 4 méthodes que vous avez mentionnées, vous utiliserez généralement uniquement release
et autorelease
dans objective-c. free
peut free
être utilisé lorsque vous avez utilisé c et malloc
sinon vous devez utiliser release
et autorelease
.
dealloc
ne doit être appelé par aucun de vos codes, car il peut interférer avec le cycle de conservation / libération utilisé par objective-c pour assurer le suivi des ressources. L’utilisation de dealloc
entraînera presque certainement des plantages au moment de l’exécution si vous l’utilisez un jour.
La ressource ultime de l’utilisation de la release
et autorelease
est la documentation de gestion de la mémoire Apple.
free
est l’opposé de malloc
et est utilisé en C. Vous ne l’utiliserez probablement pas beaucoup en programmation dans Objective C release
lorsque vous avez terminé autorelease
un object. Cela le libère automatiquement à la fin de l’itération de la boucle d’exécution en cours dealloc
. Vous ne devriez pas appeler cette méthode vous-même Vous “possédez” un object si vous l’ alloc
, le alloc
, le retain
ou le copy
.
Apple fournit une bonne documentation à ce sujet.