2013-03-26 110 views
0

所以我想知道,当我做
的Objective - C - 指针,当你将数组分配到另一个

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)这个词代表什么?我不认为它是连接/连接。

非常感谢
- 詹姆斯

+1

请减少每个帖子询问的问题数量。 – duci9y 2013-03-26 18:32:51

+0

我通常同意不要一次提出太多问题的原则,但这些问题是如此交织在一起,我认为他们确实属于一起。在不同的问题中询问他们每一个都会令人厌恶地重复。 – Chuck 2013-03-26 21:19:54

回答

6

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

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

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

所以思考这个问题的方式不是两个数组以某种方式连接或连接。你需要问的唯一问题是,“这些对象是我在两个地方与同一个对象或不同的对象进行交互的吗?”

+0

你是说,如果我做了arr2 = [arr1 mutableCopy],并且arr2具有所有nsmutablestring的,那么我更改了arr2中的所有字符串...所有字符串都在arr1中更改了? – jgvb 2013-03-26 18:48:42

+0

@James:如果你自己修改字符串(比如在所有字符串的开头添加“曾经有智慧的人”),那么是的,因为它们在两个数组中都是相同的字符串。但是如果你从一个数组中取出一个字符串,那只会发生在那个数组上 - 因为这是对数组本身的改变,而不是字符串。 – Chuck 2013-03-26 19:05:08

+0

嗯。太危险了!那么为了得到完全独立的副本,我需要对arr1中的所有对象执行递归mutableCopy调用? – jgvb 2013-03-26 19:09:34