为什么nstring obj的内存地址和iOS dev中复制的不一样?
why is the nstring obj's memory address different from the copied one in iOS dev ?
NSString * str1 = @"haha";
NSString * str2 = [str1 copy];
str1 = @"laa";
NSLog(@"str1的地址为:%p", str1);
NSLog(@"str2的地址为:%p", str2);
NSLog(@"str1的值为:%@", str1);
NSLog(@"str2的值为:%@", str2);
如上代码,它们的内存地址不同。但是如果我删除第三行,它们的内存地址是相同的。能告诉我原因吗?找了很久,谢谢
这是由于优化。在 iOS 上,每个唯一的字符串在内存中只存在一次 - 永远只有一个 haha
NSString,无论你有多少次引用它,或者你在哪里创建它。但是在第三行中,您更改了原始字符串,而副本保持不变。因此,您现在有两个唯一的字符串。
NSString * str1 = @"haha";
NSString * str2 = [str1 copy];
str1 = @"laa";
NSLog(@"str1的地址为:%p", str1);
NSLog(@"str2的地址为:%p", str2);
NSLog(@"str1的值为:%@", str1);
NSLog(@"str2的值为:%@", str2);
如上代码,它们的内存地址不同。但是如果我删除第三行,它们的内存地址是相同的。能告诉我原因吗?找了很久,谢谢
这是由于优化。在 iOS 上,每个唯一的字符串在内存中只存在一次 - 永远只有一个 haha
NSString,无论你有多少次引用它,或者你在哪里创建它。但是在第三行中,您更改了原始字符串,而副本保持不变。因此,您现在有两个唯一的字符串。