有关复制NSArray的最后一个对象的问题

时间:2011-09-26 07:45:41

标签: objective-c nscopying

我有一个MyObjects的NSArray。

我想复制数组的最后一个对象。换句话说,我想在数组中添加一个与最后一个完全相同的新对象。

我尝试过:

id object = [[self arrangedObjects] lastObject]; 
id newObject = [object copy];

但是我意识到我不能使用复制方法,因为它没有在NSObject中实现。

我应该在MyObject类中实现copy方法,返回MyObject的新实例并按如下方式更改代码:

MyObject object = [[self arrangedObjects] lastObject]; 
MyObject newObject = [object copy];

还有其他solutoins吗?

更新 来自NSObject文档

  

NSObject本身不支持NSCopying协议。子类   必须支持协议并实现copyWithZone:方法。一个   copyWithZone:方法的子类版本应该发送消息   超级首先,要包含它的实现,除非是子类   直接从NSObject下载。

2 个答案:

答案 0 :(得分:1)

如果您的对象是NSObject,则可以创建一个实现NSCopying协议的新NSObject类别。确保遍历所有键并将其值复制到新对象。对于深度复制,您还应该在每个值对象上调用“复制”。

如果您的对象是自定义的,请在其类中实现协议。

如果数组中有混合对象,那么所有这些对象都必须实现NSCopying协议,在声明它们时可以使用id <NSCopying>来避免编译时警告/错误。

答案 1 :(得分:0)

据我所知,如果您想复制一个对象,请实施NSCopying协议,该协议允许您使用NSObject - (id)copy方法。

- (id)copyWithZone:(NSZone *)zone方法中,使用+ (id)allocWithZone:(NSZone *)zone分配新对象,然后复制其成员,更新其状态等等