Objective - c - 指针以及将数组分配给另一个时发生的事情

jgv*_*gvb 0 objective-c nsmutablearray nsarray ios

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

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
Run Code Online (Sandbox Code Playgroud)


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

非常感谢
- 詹姆斯

Chu*_*uck 6

我认为你混淆了对象和变量.您没有将一个对象分配给另一个对象; 您将对象分配给变量.变量只是一种观察对象的方法,否则它将浮动在程序存储空间的某个地方.两个变量可以指向同一个对象,当发生这种情况时,是的,您将看到通过两个变量对对象的更改,因为它是同一个对象.

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

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

所以考虑这个的方式不是因为两个数组以某种方式链接或连接.你需要问的唯一问题是,"我在两个地方交互的这些物体是同一个物体还是不同物体?"