2010-08-06 5 views
2

Pourquoi quand je code que je peux faire:NSString est vraiment immuable?

NSString *test; 

test = @"stack"; 
test = @"overflow"; 

sans aucun problème, NSString est pas censé être immuable?

+0

Si elle était déjà mutable, alors pourquoi aurions-nous NSMutableString ? http://developer.apple.com/fr/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSMutableString_Class/Reference/Reference.html – peelman

+0

duplication possible de [Le dernier mot sur NSStrings: Mutable et Immuable] (http : //stackoverflow.com/questions/905396/the-final-word-on-nsstrings-mutable-and-immutable) –

Répondre

7

Il est immutable. Vous ne modifiez pas la chaîne sous-jacente avec ces instructions, vous créez/utilisez une nouvelle chaîne. Le pointeur lui-même peut changer aussi souvent que vous le souhaitez, mais ce n'est pas la chaîne.

+0

Et c'est correct de le faire ou c'est la mauvaise façon de manipuler la chaîne. – alex

+0

C'est la bonne façon de le gérer. Chaque fois que vous faites @ "Some Text", vous créez simplement une instance autoreleased de NSString. – peelman

+0

Ok, donc quand vous utilisez NSMutableString si vous pouvez le faire avec NSString, désolé si ma question semble stupide. – alex

7

L'objet chaîne est immuable. Vous modifiez uniquement le pointeur sur une chaîne différente.

1

Dans votre code que vous venez « oublier » l'ancienne valeur (pile) et de créer une nouvelle instance de chaîne et le remplir avec « trop-plein » ...