深度复制NSMutableArray问题

时间:2011-06-08 18:18:12

标签: iphone objective-c memory nsarray deep-copy

  

可能重复:
  deep copy NSMutableArray in Objective-C ?

我有两个长度为5的数组,其中包含我自定义类的项目。我想将第一个数组复制到第二个数组中。一旦复制,我希望这两个数组完全独立(我希望能够改变第一个而不影响第二个)。我尝试了几种方法无济于事(当我改变一个时,另一个也改变了)。它们如下所示。

1)

[[NSArray alloc] initWithArray:self.lifelineList copyItems:YES];

我对此方法的复制协议是:

- (id) copyWithZone:(NSZone *)zone{
Lifeline *lifelineCopy = [[Lifeline allocWithZone:zone]init];
lifelineCopy.name = name;
lifelineCopy.phone = phone;
lifelineCopy.email = email;
lifelineCopy.isActive = isActive;
lifelineCopy.contactID = contactID;
return lifelineCopy;
}

2)

[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject: self.lifelineList]];  

此方法的编码协议是:

- (id) initWithCoder:(NSCoder *)aDecoder{
if (self=[super init]){
    self.name = [aDecoder decodeObject];
    self.phone = [aDecoder decodeObject];
    self.email = [aDecoder decodeObject];
    self.contactID = [aDecoder decodeIntegerForKey:@"contactID"];
    self.isActive = [aDecoder decodeIntegerForKey:@"isActive"]>0;
}
return self;
}
- (void) encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name];
[aCoder encodeObject:self.phone];
[aCoder encodeObject:self.email];
[aCoder encodeInteger:self.contactID forKey:@"contactID"];
[aCoder encodeInteger:(NSInteger)self.isActive forKey:@"isActive"];
}

3)遍历第一个数组,将每个元素的实例变量放入临时变量中,然后将该变量添加到第二个数组中。

如果需要,我很乐意发布更多代码。

1 个答案:

答案 0 :(得分:1)

  1. 您的自定义类是否正确实现了NSCopying协议? (即实现copyWithZone:以返回完全独立的实例。)

  2. 您是自定义类正确实现NSCoding协议来归档和解码所有相关的实例变量吗?

  3. 除非您实际复制对象本身,否则这将无效。简单地分配给临时变量在运行时不会做任何事情。