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?
如果不需要复制,则实现可以返回参数——当输入参数是不可变的
当然,这是一个优化图书馆(基金会)需要认识和支持。
由于实现细节的差异,实现也可能选择不返回输入参数。例如,如果字符串是使用外部拥有的字符缓冲区创建的,则实现可能返回一个新字符串。它还可以识别参数是可变的,那么当然需要返回一个新的不可变的对象表示。
What if both strings are mutable?
深度复制更为可能——实现是由基金会定义的。但是,您将拥有唯一的实例(它们的地址不匹配)。