0

我创建了一个类,它是 NSObject(nsme 作为 GroupClass)的子类。在那个类中,我创建了一个属于“id”的属性,比如

@property(nonatomic,retain)id myObj;

现在我站在我有一个可变数组的路上,该数组包含我的 GroupClass 的实例。所以我以类似的方式获得一份副本

GroupClass* objG=[array objectAtIndex:i];

现在我想要另一个 objG 的副本。我搜索了。我找到了 NSCopying 协议。所以我将 NSCopying 作为委托添加到 GroupClass 并添加了 copyWithZone 方法。这里是

-(id)copyWithZone:(NSZone *)zone
{
  GroupClass *copy = [[[self class] allocWithZone: zone] init];
  copy.myObj=[myObj copyWithZone: zone];
  return copy;
}

在这里我需要深拷贝。但它总是在分配行后崩溃。请帮助我。谢谢。

4

1 回答 1

0

并非所有NSObject子类都采用该NSCopying协议。问题听起来像是您将此消息发送到无法识别的对象。

GroupClass你采用没关系NSCopying,那不是问题。你在 myObj 上调用 copyWithZone:,不管它是什么。

这行代码:

copy.myObj=[myObj copyWithZone: zone];

几乎可以肯定是导致崩溃的原因。

编辑

不知道 myObj 是什么,我建议如果可能并且不是一个坏主意,那么无论该类是什么,都可以将其子类化。

例如,如果它是 UIView,我会像这样子类化它:

@class JVView : UIView <NSCopying>

然后,我将copyWithZone:适当地实现该方法,复制您认为必要的实例的任何属性。

于 2014-04-15T08:48:31.563 回答