将nsmutablearray设置为与另一个相同的值会同时更改两者?

时间:2011-04-17 14:13:32

标签: iphone objective-c nsmutablearray

我有一个名为container的NSMutableArray和一个名为temp的NSMutableArray。为了创造温度,我有:

temp = container;

现在每当我改变某些东西时,例如:

[temp replaceObjectAtIndex:1 withObject:[NSNumber numberWithFloat:0.9f]];

它改变了temp,也改变了容器中的值。为什么是这样?我怎么能阻止它?

编辑:好的,我按照建议将其更改为temp = [[container mutableCopy] autorelease];

现在的问题是这一行:

[temp replaceObjectAtIndex:1 withObject:[NSNumber numberWithFloat:0.9f]];

仍会更改容器中的值。

2 个答案:

答案 0 :(得分:4)

您只是将temp设置为与container共享pointer

要获得容器的真实(独立)副本,请使用:

NSMutableArray *temp = [[container mutableCopy] autorelease];

Objective-C (作为 C 的面向对象的衍生物)使用C指针作为对象变量(*中的NSMutableArray *container

c pointer 只是指向内存中的地址。因此,如果您通过tempcontainer设置为与temp = container;相同的值,则只需为temp分配相同的地址,因为container已指向在。因此改变两者中的任何一个也将改变另一个。或者更正确:你实际上只是改变其中一个。它只是看起来你正在改变,但实际上你只是有两个指针指向同一个对象实例,正在改变。

答案 1 :(得分:1)

您只是在内存中引用相同的位置,即相同的数组。你想要做的是复制容器数组:

temp = [container mutableCopy];