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

10 iphone cocoa-touch uikit

我不应该做这样的事情有充分的理由吗?例:

我有一个MyClass类.在那里我有这个实现:

- (id)copyWithZone:(NSZone*)zone {
    MyClass *copy = [[MyClass allocWithZone:zone] init];
    copy.someproperty = [[self.someproperty copy] autorelease];
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

而不是那样,我找到了一个看起来像这样的片段:

- (id)copyWithZone:(NSZone*)zone {
    MyClass *copy = [[[self class] allocWithZone:zone] init];
    copy.someproperty = [[self.someproperty copy] autorelease];
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

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

小智 10

如果你是子类MyClass,那么第二个例子-copyWithZone:返回一个子类的实例.第一个例子没有,它返回一个实例MyClass.