是NSString值一旦提供了值就无法更改?

har*_*nan 0 iphone cocoa objective-c

嗨,我得到一个信息,NSString值是不可变的,一旦提供了值,就无法更改.

但是我创建并测试了以下代码:

NSString *str=[[NSString alloc] initWithString:@"Hello"];    
NSLog(@"\n\nstr = %@",str);
str=@"asdasd";
NSLog(@"\n\n new str = %@",str);
Run Code Online (Sandbox Code Playgroud)

这给出了"Hello"作为第一个str值,"asdasd"作为第二个str值.如果是这样,调用NSString不可变的相关性是什么?提前感谢.

Jua*_*tti 10

你在第三行上做的只是创建一个新的字符串并用str变量指向它.您没有更改原始字符串,而是将变量指向新变量.


jus*_*tin 5

NSString是不可改变的.你不能改变它.您的混淆源于您的变量(指针)不是const.

你所做的只是将指针重新分配给另一个不可变的字符串.

如果您尝试将字符串附加到任一字符串,则会出现错误.具体来说,这是"......调用NSString不可变的相关性".你应该解释这个,因为字符串实例可能不会被改变,即使你声明的变量可能被分配了另一个NSString实例,因为它不是const.

您可以使指针const和字符串不可变,如下所示:

NSString * const aStr = @"aStr";
Run Code Online (Sandbox Code Playgroud)