0

所以我想知道当我这样做时会发生什么

NSMutableArray *arr1 = [[NSMutableArray alloc] init];
NSMutableArray *arr2 = [[NSMutableArray alloc] init];

[arr1 addobject:ob1];

arr2 = arr1;

[self changeValue:[arr2 objectAtIndex:2]]; //function that will modify what is sent to it


1) 我什至可以在 nsmutablearrays 之间做 = 吗?
2) 如果我要访问 arr1 中的对象,它会被修改吗?
3) 它有多深?- 如果我要从其他地方访问该对象,它会被修改吗?
4) 我假设使用 mutableCopy 会返回一个全新的数组。
5)反正有模拟这种深度链接/连接吗?例如,如果我想将同一个对象分配给 2 个不同的数组,那么如果我修改一个,它会改变两个数组中的那个对象?
6) 代表这个的词是什么?我不认为它是链接/连接。

非常感谢
-詹姆斯

4

1 回答 1

6

我认为您混淆了对象和变量。您不会将一个对象分配给另一个对象;您将对象分配给变量。变量只是保持对象视线的一种方式,否则它会漂浮在程序内存空间的某个地方。两个变量可以指向同一个对象,当这种情况发生时,是的,你会通过这两个变量看到对象的变化,因为它是同一个对象

当你这样做时arr2 = arr1,你让 arr2 指向同一个数组 arr1 。所以如果你在 arr1 中改变了一些东西,你会在 arr2 中看到它吗?是的,因为arr2arr1。它是同一个对象,只是叫了两个不同的名字。

如果相反arr2 = [arr1 mutableCopy],是的,那将创建一个新的数组对象,因此这两个变量将指向不同的对象。如果您将一个对象添加到一个数组中,它不会神奇地添加到另一个数组中。但这提出了一个问题:如果 arr1 包含一堆 NSMutableStrings 怎么办?更改 arr1 中的一个字符串是否也会更改 arr2 中的相应字符串?是的,因为即使数组本身是不同的对象,它仍然包含与原始数组相同的对象。

所以考虑这个问题的方法不是两个数组以某种方式链接或连接。您需要问的唯一问题是,“我在两个地方与之交互的这些对象是同一个对象还是不同的对象?”

于 2013-03-26T18:40:11.900 回答