2

我有一个 MyObjects 的 NSArray。

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

我试过:

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

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

我是否应该在 MyObject 类中实现复制方法,返回 MyObject 的新实例并更改代码如下:

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

还是有其他解决方案?

更新 来自 NSObject 文档

NSObject 本身不支持 NSCopying 协议。子类必须支持该协议并实现 copyWithZone: 方法。copyWithZone: 方法的子类版本应该首先向 super 发送消息,以合并其实现,除非子类直接来自 NSObject。

4

2 回答 2

1

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

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

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

于 2011-09-26T08:19:57.757 回答
0

据我所知,如果你想复制一个对象,实现NSCopying协议,它可以让你使用NSObject - (id)copy方法。

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

于 2011-09-26T07:50:51.180 回答