我有一个名为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]];
仍会更改容器中的值。
答案 0 :(得分:4)
您只是将temp
设置为与container
共享pointer。
要获得容器的真实(独立)副本,请使用:
NSMutableArray *temp = [[container mutableCopy] autorelease];
Objective-C (作为 C 的面向对象的衍生物)使用C指针作为对象变量(*
中的NSMutableArray *container
)
c pointer 只是指向内存中的地址。因此,如果您通过temp
将container
设置为与temp = container;
相同的值,则只需为temp分配相同的地址,因为container
已指向在。因此改变两者中的任何一个也将改变另一个。或者更正确:你实际上只是改变其中一个。它只是看起来你正在改变,但实际上你只是有两个指针指向同一个对象实例,正在改变。
答案 1 :(得分:1)
您只是在内存中引用相同的位置,即相同的数组。你想要做的是复制容器数组:
temp = [container mutableCopy];