通过类名与self调用类方法

Mil*_*lad 18 objective-c class-method

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

[Calculator runProgram]
Run Code Online (Sandbox Code Playgroud)

要么

[self runProgram]
Run Code Online (Sandbox Code Playgroud)

这两个都一样吗?

小智 33

如果在实例方法中:

[self runProgram]
Run Code Online (Sandbox Code Playgroud)

在这里,self表示对象实例本身,因此它将生成运行时错误.你想用

[[self class] runProgram]
Run Code Online (Sandbox Code Playgroud)

代替.

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

[self runProgram]
Run Code Online (Sandbox Code Playgroud)

是正确的,因为现在self指的是类本身.我不鼓励使用

[Calculator runProgram]
Run Code Online (Sandbox Code Playgroud)

因为那么类的子类会错误地调用超类'(Calculator's)方法而不是可能被重写的方法.

  • 需要注意的是,`[Calculator runProgram]` 对于明确与 `Calculator` 无关的类是正确的,那么各种工厂方法的用法? (2认同)