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

时间:2013-03-26 18:31:13

标签: ios objective-c nsmutablearray nsarray

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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

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