Quelles sont les différences entre free, dealloc, release et autorelease?

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
  • Si vous possédez un object, vous le release lorsque vous avez terminé
  • Vous pouvez également autorelease un object. Cela le libère automatiquement à la fin de l’itération de la boucle d’exécution en cours
  • Lorsque le nombre de références sur un object tombe à zéro, le moteur d’exécution appelle 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.