Iphone 具有相同字符串值的两个NSString对象的内存地址
可能重复:Iphone 具有相同字符串值的两个NSString对象的内存地址,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,可能重复: s1和s2的内存地址是否相同 如果是,为什么 如果两个字符串都是可变的呢 NSString *s1 = @"Hello"; NSString *s2 = [[NSString alloc]initWithString:@"Hello"]; s1和s2的内存地址是否相同 可能——实现是由基金会定义的。 如果是,为什么 当不需要复制时,实现可能会返回参数——当输入参数是不可变的NSString时,您请求的对象的行为与输入参数相同。当像您所做的那样传递不朽的NSString文本时,实
s1和s2的内存地址是否相同 如果是,为什么 如果两个字符串都是可变的呢
NSString *s1 = @"Hello";
NSString *s2 = [[NSString alloc]initWithString:@"Hello"];
s1和s2的内存地址是否相同
可能——实现是由基金会定义的。 如果是,为什么
当不需要复制时,实现可能会返回参数——当输入参数是不可变的NSString
时,您请求的对象的行为与输入参数相同。当像您所做的那样传递不朽的NSString
文本时,实现可以很容易地确定参数是不可变的,并选择返回参数(retained
)
当然,这是图书馆(基金会)需要认识和支持的优化
由于实现细节的差异,实现也可能选择不返回输入参数。例如,如果字符串是使用外部拥有的字符缓冲区创建的,则实现可能会返回新字符串。它还可以识别参数是可变的,然后当然需要返回新的不可变对象表示
如果两个字符串都是可变的呢
NSString *s1 = @"Hello";
NSString *s2 = [[NSString alloc]initWithString:@"Hello"];
然后深度复制更可能——实现是由基金会定义的。但是,您将拥有唯一的实例(它们的地址将不匹配)。
的可能副本,以及