上下文是在一个类(即+
)方法中,在实际类的超类实现中的一个(显然是无错误的)方法中 -
我看到了
something = [self someMethod];
和
something = [[self class] someMethod];
在这两种情况下,someMethod
在“实际”子类(以及当前超类)中都有一个实现,子类实现是预期要调用的。
两种形式之间是否存在实际差异,或者某种理由偏好另一种形式?
答案 0 :(得分:3)
不同之处在于您可以使用[self class]安全地复制和粘贴方法。 我认为不存在其他一些差异。
答案 1 :(得分:1)
没有实际区别,因为+class
返回类对象,这正是self
在类方法中指向的对象。换句话说,
+ (BOOL)selfEqualsClassObject {
return self == [self class];
}
将始终返回YES
。
鉴于此,我看不出任何理由更喜欢发送额外的消息。我想说只需使用self
。