在类方法中,[self someMethod]和[[self class] someMethod]之间的区别

时间:2013-04-25 21:09:45

标签: objective-c

上下文是在一个类(即+)方法中,在实际类的超类实现中的一个(显然是无错误的)方法中 -

我看到了

something = [self someMethod];

something = [[self class] someMethod];

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

两种形式之间是否存在实际差异,或者某种理由偏好另一种形式?

2 个答案:

答案 0 :(得分:3)

不同之处在于您可以使用[self class]安全地复制和粘贴方法。 我认为不存在其他一些差异。

答案 1 :(得分:1)

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

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

将始终返回YES

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