Josué (
Je commence tout juste à jeter un œil à Objective-C et Cocoa en vue de jouer avec le SDK de l'iPhone. Je suis raisonnablement à l'aise avec les concepts malloc
et free
de C, mais le schéma de comptage des références de Cocoa me rend plutôt confus. On me dit que c'est très élégant une fois que vous l'avez compris, mais je n'ai pas encore dépassé le stade.
Comment fonctionnent release
, retain
et autorelease
et quelles sont les conventions concernant leur utilisation ?
(Ou à défaut, qu'avez-vous lu qui vous a aidé à l'obtenir ?)
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 :
+alloc/+allocWithZone:
, +new
, -copy
ou -mutableCopy
ou si vous 5
un objet, vous en prenez possession et devez vous assurer qu'il est envoyé -release
.-release
. -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.