我在NSMutableArray
上发现了一个非常奇怪的问题。首先,我创建1 NSMutableArray
(arrA
)并向其添加对象。然后我创建了另一个NSMutableArray
(arrB
)。
然后我将arrA
添加到arrB
。最后,当我更新arrB
内的数据时,arrA
也会更新。代码如下
[arrA addObjectsFromArray:dataBack];
[arrB removeAllObjects];
[arrB addObjectsFromArray:arrA];
在此for
循环后,我发现数据arrA
更改为arrB
for (int i = arrB.count-1; i >= 0; i--) {
if (itemExLong > 0 && [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyPriceEx"] doubleValue] > itemExLong)
{
itemExLong = [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyPriceEx"] doubleValue] + itemExLong;
itemTaxLong = [[[arrB objectAtIndex:i] objectForKey:@"IM_QtyTax"] doubleValue] - itemTaxLong;
data = [arrB objectAtIndex:i];
[data setValue:[NSString stringWithFormat:@"%0.2f",itemExLong] forKey:@"IM_PriceEx"];
[data setValue:[NSString stringWithFormat:@"%0.2f",itemTaxLong] forKey:@"IM_QtyTax"];
[arrB replaceObjectAtIndex:i withObject:data];
break;
}
}
当我replaceObjectAtIndex
时,我发现arrA
数据发生了变化。请帮助。
答案 0 :(得分:2)
两个数组都包含指向相同底层对象的指针。因此,如果您将使用任何数组中的指针更改对象,它将更改对象(而不是指针),并且该对象对于两个数组都是相同的。 如果要保留对象的不同副本,请在操作之前复制对象。
如果您有自定义类,则可以通过实施NSCopying
协议添加复制功能,以了解有关NSCopying的更多信息