请检查以下代码,我在哪里为数组创建多个引用
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)
有没有办法引用字符串?
答案 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
的方法,两个引用都将被修改。