所以我想知道当我做什么时会发生什么
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)这个词代表什么?我不认为它是连接/连接
非常感谢
-James
答案 0 :(得分:6)
我认为你会混淆对象和变量。你不能将一个对象分配给另一个对象;您将对象分配给变量。变量只是一种观察对象的方法,否则它将浮动在程序存储空间的某个地方。两个变量可以指向同一个对象,当发生这种情况时,是的,您将通过两个变量看到对象的更改,因为它是同一个对象。
当你执行arr2 = arr1
时,你的arr2指向同一个数组arr1。所以,如果你在arr1中改变一些东西,你会在arr2中看到它吗?是的,因为 arr2 是 arr1 。它是同一个对象,只是称为两个不同的名称。
如果它是arr2 = [arr1 mutableCopy]
,是的,那将创建一个新的数组对象,因此这两个变量将指向不同的对象。如果将一个对象添加到一个数组中,它就不会神奇地添加到另一个数组中。但这引出了一个问题:如果arr1包含一堆NSMutableStrings怎么办?更改arr1中的一个字符串是否也会更改arr2中的相应字符串?是的,因为即使数组本身是一个不同的对象,它仍然包含与原始数组相同的对象。
所以考虑这个的方式并不是因为两个数组以某种方式链接或连接。您需要问的唯一问题是,"我在两个地方与这些对象交互的是同一个对象还是不同的对象?"