[MyClass alloc]和[[self class] alloc]之间的区别在哪里?

时间:2009-08-15 21:26:30

标签: iphone cocoa-touch uikit

我不应该做这样的事情吗? 例如:

我有一个课程 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;
}

不同之处在于,第一个只是使用名称,如果它自己的类是人类可读的,就像它是任何其他类一样。而第二个问自己是什么类。这有什么不同,或者在这种情况下都可以使用吗?

1 个答案:

答案 0 :(得分:10)

如果您继承MyClass,那么-copyWithZone:的第二个示例将返回子类的实例。第一个示例没有,它返回MyClass的实例。