ios - 请帮助解决双重 NSMutableArray 问题

标签 ios objective-c nsmutablearray

我在 NSMutableArray 上发现了一个非常奇怪的问题。首先,我创建了 1 个 NSMutableArray (arrA) 并向其添加对象。然后我创建另一个 NSMutableArray (arrB)。

然后我将 arrA 添加到 arrB。最后,当我更新 arrB 中的数据时,arrA 也会更新。代码如下

[arrA addObjectsFromArray:dataBack];

[arrB removeAllObjects];
[arrB addObjectsFromArray:arrA];

在这个 for 循环之后我发现数据 arrAarrB 一样变化

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数据改变了。请帮忙。

最佳答案

两个数组都包含指向相同底层对象的指针。因此,如果您将使用任何数组中的指针更改对象,它将更改对象(而不是指针),并且该对象对于两个数组都是相同的。 如果要保留对象的不同副本,请在操作对象之前创建对象的副本。

如果您有自定义类,那么您可以通过实现 NSCopying 协议(protocol)添加复制功能,以了解更多关于 NSCopying 的信息

关于ios - 请帮助解决双重 NSMutableArray 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31993623/

相关文章:

objective-c - iOS-如何在线程(使用GCD)结束工作时收到通知

ios - 测试来自 NSMutableArray 的值并显示到 Tableview

objective-c - 在 Objective c 中管理内存

iphone - 在类之间访问 NSMutableArray 的内容

ios - 无法在 Mavericks 下使用我自己的 kestore 和 xcodebuild

ios - 使用 UIImagePickerControllerOriginalImage 从 UIImagePickerController 获取图像时获取内存警告

ios - 如果应用程序处于终止/强制关闭(不在后台)状态,收到推送通知时将调用什么委托(delegate)方法?

ios - 关于 MPMediaItemCollection 项目 lastObject

ios - 核心蓝牙 : Attempt to write to device

ios - 从并行窗口显示 View Controller (具有相同的父级)