Immutable strings
// Setup two variables to point to the same string
NSString * str1 = @"Hello World";
NSString * str2 = str1;
// "Replace" the second string
str2 = @"Hello ikilimnik";
// And list their current values
NSLog(@"str1 = %@, str2 = %@", str1, str2);
output:str1 = Hello World, str2 = Hello ikilimnik
Mutable strings
// Setup two variables to point to the same string
NSMutableString * str1 = [NSMutableString stringWithString:@"Hello World"];
NSMutableString * str2 = str1;
// "Replace" the second string
[str2 setString:@"Hello ikilimnik"];
// And list their current values
NSLog(@"str1 = %@, str2 = %@", str1, str2);
output:str1 = Hello ikilimnik, str2 = Hello ikilimnik
注意,當你使用不可變的NSString class時,替換舊的字符串的唯一方式就是創建一個新的字符串然後更新你的變量“str2”
來指向這個新的字符串。這個操作不會影響“str1”所指向的內容,因此它將繼續指向初始的字符串。
在NSMutableString的例子裏,我們沒有創建第二個字符串,而是通過改變已經存在的可變字符串“str2”的內容來代替。
由於str1和str2兩個變量都仍然指向同一個字符串對象,從nslog中可以看到它們值都將會被更新。
理解指針變量和它實際指向對象的不同是非常重要的。一個NSString對象是不可變的,但是這並不阻止你改變指向這個不
可變對象的指針的值。
"NSString *"這個數據類型代表一個NSString對象的指針,不是NSString對象本身。
"NSMutableString *"這個數據類型則是代表"NSMutableString"對象本身,這兩者是有區別的。
這也是有的時候我們使用NSMutableString類型字符串時,要使用copy的原因,因爲可能不想改變新的字符串時影響到舊的字符串的值。
From: http://blog.csdn.net/bl1988530/article/details/6548095