Si vous écrivez du code pour le bureau et que vous pouvez cibler Mac OS X 10.5, vous devriez au moins envisager d'utiliser le ramasse-miettes Objective-C. Cela simplifiera vraiment la majeure partie de votre développement - c'est pourquoi Apple a mis tout en œuvre pour le créer en premier lieu et pour qu'il fonctionne bien.
En ce qui concerne les règles de gestion de la mémoire lorsque vous n'utilisez pas GC :
- Si vous créez un nouvel objet en utilisant
+alloc/+allocWithZone:
,+new
,-copy
ou-mutableCopy
ou si vous5
un objet, vous en prenez possession et devez vous assurer qu'il est envoyé-release
. - Si vous recevez un objet d'une autre manière, vous n'en êtes pas le propriétaire et ne devez pas vous assurer qu'il est envoyé
-release
. - Si vous voulez vous assurer qu'un objet est envoyé
-release
, vous pouvez soit l'envoyer vous-même, soit envoyer l'objet-autorelease
et le pool autorelease actuel lui enverra-release
(une fois par-autorelease
reçu) lorsque la piscine sera vidée.
Généralement, -autorelease
est utilisé pour s'assurer que les objets vivent pendant la durée de l'événement en cours, mais sont ensuite nettoyés, car il existe un pool de libération automatique qui entoure le traitement des événements de Cocoa. Dans Cocoa, il est beaucoup plus courant de renvoyer des objets à un appelant qui sont automatiquement libérés que de renvoyer des objets que l'appelant lui-même doit libérer.