2010-02-19 4 views
4

J'ai vu quelques messages ici sur le problème de l'utilisation de conserver ou de copier pour les chaînes. Je n'arrive toujours pas à comprendre la différence ou l'importance.NSString conserve copie question

Dans mon cas pour le moment j'ai une classe avec un chargement complet de nsstrings pour contenir des chaînes. Je souhaite que cette classe ne soit instanciée qu'une seule fois et que ses variables nsstring changent en fonction de l'index cliqué dans une vue de table. Aurais-je raison de dire que si je choisissais d'utiliser retenir que mes nsstrings seraient écrasés chaque fois que je définis leur valeur sur mon clic de table et que si je choisis la copie, je voudrais en quelque sorte 2 instances de chaque chaîne .. ..?

Je suis désolé ..... je totalement ne comprends pas

Répondre

6

Ceci est une question sur la copie d'objets mutables contre les immuables. Étant donné que les objets NSString sont immuables (vous ne pouvez pas modifier leur contenu), ils mettent en œuvre -copy comme ceci:

- (id) copyWithZone: (NSZone *) zone 
{ 
    return [self retain]; 
} 

Si vous pensez à ce sujet, il n'y a aucune raison de dupliquer un objet immuable parce que est une perte de mémoire. D'autre part, les objets NSMutableString peuvent voir leur contenu changer au cours de leur vie, donc si vous demandez une copie d'un NSMutableString, vous obtiendrez une copie réelle, un objet différent.

Si vos chaînes ne sont pas NSMutableStrings, cela n'a pas d'importance que vous les conserviez ou que vous les copiiez. Cependant, il est important de choisir la bonne méthode si vous refactorisez votre code ultérieurement pour utiliser NSMutableStrings. Une logique commune devrait répondre à la question suivante: si je reçois un objet dont le contenu peut changer à l'extérieur, de quelle valeur ai-je besoin? Plus souvent qu'autrement, vous voudrez faire une copie.

+0

Merci pour la clarification! Je ne savais pas que '[NSString copy]' serait simplement conservé. – MrMage

Questions connexes