关于iphone:具有相同字符串值的两个NSString对象的内存地址

Memory addresses of two NSString objects having same string value

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why are these two NSString pointers the same?

s1&s2的内存地址是否相同?

如果是,那为什么?

如果两个字符串都是可变的呢?

1
2
3
NSString *s1 = @"Hello";

NSString *s2 = [[NSString alloc]initWithString:@"Hello"];


Will the memory addresses of s1 & s2 be same?

也许--实现是由基金会定义的。

If Yes, then Why?

如果不需要复制,则实现可以返回参数——当输入参数是不可变的NSString时,您请求的对象的行为与输入参数相同。当像您所做的那样传递不朽的NSString文本时,实现可以轻松地确定参数是不可变的,并选择返回参数(retained)。

当然,这是一个优化图书馆(基金会)需要认识和支持。

由于实现细节的差异,实现也可能选择不返回输入参数。例如,如果字符串是使用外部拥有的字符缓冲区创建的,则实现可能返回一个新字符串。它还可以识别参数是可变的,那么当然需要返回一个新的不可变的对象表示。

What if both strings are mutable?

深度复制更为可能——实现是由基金会定义的。但是,您将拥有唯一的实例(它们的地址不匹配)。