Quand on se demande si vous possédez un objet, demandez-vous:
Est-ce que la méthode que je l'habitude de créer cet objet ...
- commencent par
new
?
- commencer par
alloc
?
- contiennent
copy
?
- est égal à
retain
?
Si vous pouvez répondre « oui » à l'un de ceux, alors vous êtes chargé d'invoquer release
ou autorelease
sur l'objet retourné. (Notez que les règles pour les objets Core Foundation sont légèrement différent. Notez également que tout ce que la documentation dit explicitement contredit cette victoire.) La documentation remplace toujours les directives)
Dans le cas de votre chaîne, les réponses à toutes vos questions sont "non", vous n'êtes donc pas responsable de l'objet. Les chaînes constantes (du style @"foo"
) sont codées en dur dans le fichier binaire de l'application et ne peuvent pas être désaffectées. Cela, cependant, est un détail de mise en œuvre. Tant que vous suivez les règles de gestion de la mémoire, vous serez bon!
Récemment, j'ai lu un très bel article sur la gestion de la mémoire http://goo.gl/Tp8WW J'espère que cela vous aidera à mieux comprendre. –
Merci, je suis généralement très à l'aise avec la gestion de la mémoire Cocoa, j'étais un peu perplexe sur la façon dont les cordes dur codées fonctionnent. –
@ Flash84x: Le détail de l'implémentation qui empêche la libération est que les chaînes constantes ont un nombre de rétention de INT_MAX. Ceci est traité comme un cas spécial par le temps d'exécution et transforme 'retel' et' release' en no-ops. – JeremyP