获取从字符串文字分配的NSStrings的相同内存地址

Exp*_*ing 4 objective-c nsstring ios

我为下面的代码片段获取了相同的内存地址

NSString *str = @"2";

NSArray *arr = [NSArray arrayWithObjects:@"1", str, @"3", @"4", @"5", @"6", nil];

NSString *strTest = @"6";
strTest = @"2";
NSLog(@"object  %x", [arr objectAtIndex:1]);
Run Code Online (Sandbox Code Playgroud)

对象"str","strTest"和"log print"给出相同的地址,虽然我已经声明了不同的实例NSString然后它是如何发生的.请有人让我知道.这对我来说很奇怪.

Sta*_*ort 5

str并且NSLog应该提供相同的内存地址,因为它是同一个对象,并没有新的分配作出.strTest变量的两行可能由编译器优化为单个NSString *strTest = @"2",并且由于NSString是不可变的,因此保存内存空间并将其指向@"2"可执行文件数据段中分配的相同字符串没有问题.