Objective c 在类方法中,[self-someMethod]和[[self-class]someMethod]之间的差异

Objective c 在类方法中,[self-someMethod]和[[self-class]someMethod]之间的差异,objective-c,Objective C,上下文在类(即+)方法中,在实际类的超类实现中的(显然没有bug)方法中-- 我明白了 something = [self someMethod]; 及 在这两种情况下,someMethod在“实际”子类(以及当前超类)中都有一个实现,子类实现是预期调用的 这两种形式之间有什么实际的区别吗,或者有什么理由选择其中一种形式而不是另一种形式?区别在于您可以安全地将方法复制并粘贴到[self class]的任何位置。 我不认为还有其他区别。区别在于您可以安全地将该方法复制并粘贴到[self clas

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

我明白了

something = [self someMethod];

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


这两种形式之间有什么实际的区别吗,或者有什么理由选择其中一种形式而不是另一种形式?

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

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

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

+ (BOOL)selfEqualsClassObject {
    return self == [self class];
}
将始终返回
YES


鉴于此,我看不出有任何理由更愿意发送额外的消息。我想说,只使用
self
没有实际的区别,因为
+class
返回class对象,这正是
self
在class方法中指向的对象。换句话说,

+ (BOOL)selfEqualsClassObject {
    return self == [self class];
}
将始终返回
YES


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

我相信你就有了!当我检查时,我看到在几个实例方法中调用了带有[self class]的方法,其中需要
class
。想必逻辑是在这里复制的,或者程序员决定在任何上下文中调用的方法都使用这种风格。我相信你已经做到了!当我检查时,我看到在几个实例方法中调用了带有[self class]的方法,其中需要
class
。可能是逻辑被复制到了这里,或者程序员决定在任何上下文中调用的方法都使用这种风格。好吧,学究式的,类可以重写
+class
,以返回其他内容,但这太愚蠢了。在这种情况下,问题中的两种说法会有所不同。但这样做是愚蠢的,其他解释更有可能@事实上,我已经想到了一些重写<代码>类< /> >的方法(尽管很多人认为这种方法是一种变态)。但在这种情况下没有什么特别的。我认为Guiseppe的答案是正确的。好吧,学究式的,类可以重写
+class
以返回其他内容,但那将是愚蠢的。在这种情况下,问题中的两种说法会有所不同。但这样做是愚蠢的,其他解释更有可能@事实上,我已经想到了一些重写<代码>类< /> >的方法(尽管很多人认为这种方法是一种变态)。但在这种情况下没有什么特别的。我认为吉塞佩的回答是正确的。