这是我的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;
}
)
现在,我想将object
从NSMutableArray
复制到另一个NSMutableArray
。
为此我用这个:
[arrayCopyRow addObject:[arrayResult objectAtIndex:0]];
但我也存储了它的地址,所以如果我更改ValueAtIndex 0
它会自动更改它object
。
如何防止这种情况?如何创建深层副本?
答案 0 :(得分:0)
为此,您需要一份深层照片。
所以你可以先运行:
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;
}
答案 1 :(得分:0)
将元素的副本放入另一个数组中。
[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] copy]];
或
[arrayCopyRow addObject:[[arrayResult objectAtIndex:0] mutableCopy]];
如果你想要所有元素的副本,你可以像luk2302那样做一个深层复制。
答案 2 :(得分:-2)
使用此代码:
NSMutableArray *array = [yourFirstArray mutableCopy];