1

上下文在类(即+)方法中,在实际类的超类实现中的(显然没有错误)方法中——

我懂了

something = [self someMethod];

something = [[self class] someMethod];

在这两种情况下someMethod,在“实际”子类(以及当前超类)中都有一个实现,并且子类实现是预期被调用的。

这两种形式之间是否有任何实际区别,或者出于某种原因偏爱其中一种形式?

4

2 回答 2

3

不同之处在于您可以安全地将方法复制并粘贴到 [self class] 的任何位置。我认为没有其他区别。

于 2013-04-25T21:13:47.607 回答
1

没有实际区别,因为+class返回类对象,这正是self类方法中指向的对象。换句话说,

+ (BOOL)selfEqualsClassObject {
    return self == [self class];
}

总会回来YES的。

鉴于此,我看不出有任何理由更喜欢发送额外的消息。我会说只是使用self.

于 2013-04-25T21:23:50.657 回答