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

时间:2012-08-11 19:18:32

标签: iphone objective-c ios xcode

  

可能重复:
  Why are these two NSString pointers the same?

s1&的存储器地址s2是一样的吗?

如果是,那么为什么?

如果两个字符串都是可变的怎么办?

NSString *s1 = @"Hello";

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

1 个答案:

答案 0 :(得分:2)

  

s1&的存储器地址s2是一样的吗?

也许 - 实施由基金会定义。

  

如果是,那么为什么?

如果不需要复制,实现可以返回参数 - 当输入参数是不可变NSString时,您请求的对象与输入参数的行为相同。当你完成传递不朽的NSString文字时,实现可以很容易地确定参数是不可变的,并选择返回参数(retained)。

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

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

  

如果两个字符串都是可变的怎么办?

然后深度复制更有可能 - 实现由Foundation定义。但是,您将拥有唯一的实例(它们的地址不匹配)。