Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 具有相同字符串值的两个NSString对象的内存地址_Iphone_Objective C_Ios_Xcode - Fatal编程技术网

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"];

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

的可能副本,以及