【发布时间】:2023-04-09 04:01:01
【问题描述】:
我尝试创建一个赋予协议 NSCopying 的复制方法。
我有以下课程:
@interface Gene : NSObject <NSCopying>
{
int firstAllele;
int secondAllele;
}
用方法:
-(id) copyWithZone:(NSZone*) zone
{
id clonedGene = [[[self class] allocWithZone:zone] initWithAllele1:first andAllele2:second];
return clonedGene;
}
如果我按以下方式调用该方法:
Gene* gene1 = [[Gene alloc]initWithAllele1:4 andAllele2:2];
Gene* gene2 = [gene1 copy];
调用gene1的copy方法时崩溃。
我必须以不同的方式调用该方法吗?
喜欢[gene1 copyWithZone:(NSZone *)],但我必须通过什么对象?我必须创建一个 NSZone 对象吗?还是有一个我可以作为参数传递的默认值?
感谢您的帮助
【问题讨论】:
-
崩溃后的调试器输出是什么?
-
好吧,我想通了,我必须添加一个副本,而不是只传递第一个和第二个等位基因对象:
标签: objective-c deep-copy copywithzone