我不应该做这样的事情吗? 例如:
我有一个课程 MyClass 。在那里我有这个实现:
- (id)copyWithZone:(NSZone*)zone {
MyClass *copy = [[MyClass allocWithZone:zone] init];
copy.someproperty = [[self.someproperty copy] autorelease];
return copy;
}
而不是那样,我找到了一个看起来像这样的片段:
- (id)copyWithZone:(NSZone*)zone {
MyClass *copy = [[[self class] allocWithZone:zone] init];
copy.someproperty = [[self.someproperty copy] autorelease];
return copy;
}
不同之处在于,第一个只是使用名称,如果它自己的类是人类可读的,就像它是任何其他类一样。而第二个问自己是什么类。这有什么不同,或者在这种情况下都可以使用吗?
答案 0 :(得分:10)
如果您继承MyClass
,那么-copyWithZone:
的第二个示例将返回子类的实例。第一个示例没有,它返回MyClass
的实例。