繁体   English   中英

将对象从 NSMutableArray 复制到另一个 NSMutableArray

[英]Copy Object from NSMutableArray to another NSMutableArray

这是我的 arrayResult ( NSMutableArray ) :

<__NSArrayM 0x7fd160e365f0>(
{
    Amount = 00;
    Carat = 00;
    Color = D;
    Cut = EX;
    Discount = 00;
    IsSelected = 1;
    Quality = IF;
    Rate = 00;
    Shape = RBC;
    StoneNo = "";
    Symme = EX;
},
{
    Amount = 00;
    Carat = 00;
    Color = D;
    Cut = EX;
    Discount = 00;
    IsSelected = 0;
    Quality = IF;
    Rate = 00;
    Shape = RBC;
    StoneNo = "";
    Symme = EX;
}
)

现在我想将一个objectNSMutableArray复制到另一个NSMutableArray 为此,我使用这个:

    [arrayCopyRow addObject:[arrayResult objectAtIndex:0]];

但是我也存储了它的地址,所以如果我改变ValueAtIndex 0它会自动改变它的复制object

我如何防止这种情况? 如何创建深拷贝?

为此,您将需要一个深拷贝。

所以你可以先运行:

NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];

这将根据 Apples 文档创建一个深度副本,并且数组中的项目需要符合 NSCopying 协议。

如果你只想复制一个对象,你可以使用newArray作为临时数组,然后创建并初始化一个新的可变数组,然后像你在问题中一样将对象移动到那里。

为了确保使用上述方法将任何自定义对象复制为深层副本,您需要在每个类中添加copyWithZone:方法。

粗略的例子:

-(id) copyWithZone:(NSZone *) zone
{
    ObjectInArray *object = [super copyWithZone:zone];
    object.someValue = self.someValue;
    return object;
}

将元素的副本放入另一个数组中。

[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] copy]];

或者

[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] mutableCopy]];

如果你想要所有元素的副本,你可以像 luk2302 所说的那样进行深拷贝。

使用此代码:

NSMutableArray *array = [yourFirstArray mutableCopy];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM