![](/img/trans.png)
[英]How to copy one NSMutablearray to another 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;
}
)
现在我想将一个object
从NSMutableArray
复制到另一个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.