如何为字符串提供多个引用

时间:2011-12-27 10:45:38

标签: objective-c nsstring

请检查以下代码,我在哪里为数组创建多个引用

NSMutableArray *array1 = [[NSMutableArray alloc] init];
NSMutableArray *array2 = array1;
[array1 addObject:@"One"];
[array1 addObject:@"Two"];

NSLog (@"Array1 %@",array1);
NSLog (@"Array2 %@",array2);
  

控制台输出

     

Array1(       一,       二)Array2(       一,       二)

Array1和Array2都引用相同的地址

同样明智地我尝试过NSMutableString,但我没有成功

NSMutableString *str1 = [[NSMutableString alloc] init];
NSMutableString *str2 = str1;
str1 = @"Hello";

NSLog (@"Str1 : %@", str1);
NSLog (@"Str2 : %@", str2);
  

控制台输出为Str1 Hello Str2(null)

有没有办法引用字符串?

1 个答案:

答案 0 :(得分:2)

一切都很正常。随着:

str1 = @"Hello";

str1没有指向你上面分配两行的内存。 str2没有改变,仍然指向那个记忆的地方。

您给出的示例对于数组和字符串看起来并不相同。在第一个对象添加到一个数组中,但不要更改任何指针的值。

在第二步中,您将引用修改为对象。

第二个例子应该写成:

NSMutableString *str1 = [[NSMutableString alloc] init];
NSMutableString *str2 = str1;
[str1 appendString:@"foo"];

NSLog (@"Str1 : %@", str1);
NSLog (@"Str2 : %@", str2);

输出:

  

Str1:foo
  Str2:foo

在同一个可变字符串(一个内存位置)上使用两个引用,并使用NSMutableString的方法,两个引用都将被修改。