Objective c 通过类名vs self调用类方法

Objective c 通过类名vs self调用类方法,objective-c,class-method,Objective C,Class Method,假设我们有一个名为Calculator的类。其中有一个类方法,名为runProgram。 如果我想在类的实现中调用这个类方法,那么这两者之间的区别是什么: [Calculator runProgram] 或 这两者是否相同?如果在实例方法中: [self runProgram] 在这种情况下,self表示对象实例本身,因此它将生成运行时错误。你想用 [[self class] runProgram] 相反 但是,如果从另一个类方法调用此方法,则 [self runProgram] 是正确

假设我们有一个名为
Calculator
的类。其中有一个类方法,名为
runProgram
。 如果我想在类的实现中调用这个类方法,那么这两者之间的区别是什么:

[Calculator runProgram]


这两者是否相同?

如果在实例方法中:

[self runProgram]
在这种情况下,
self
表示对象实例本身,因此它将生成运行时错误。你想用

[[self class] runProgram]
相反

但是,如果从另一个类方法调用此方法,则

[self runProgram]
是正确的,因为现在
self
引用类本身。我不鼓励使用

[Calculator runProgram]

因为类的子类会错误地调用超类“(
Calculator
”的方法,而不是可能被重写的方法。

需要注意的是,
[Calculator runProgram]
对于与
Calculator
明确无关的类是正确的,ala各种工厂方法的使用?+1:当然,因为没有其他方法可以使用它们!但是OP询问在实现器类本身中调用该方法。
[Calculator runProgram]