web-dev-qa-db-ja.com

クラス名を介してクラスメソッドを呼び出すvs自己

Calculatorという名前のクラスがあるとします。その中にはrunProgramと呼ばれるクラスメソッドがあります。クラスの実装内でこのクラスメソッドを呼び出す場合、これらの2つの違いは次のようになります。

[Calculator runProgram]

OR

[self runProgram]

これらは両方とも同じですか?

19
Milad

インスタンスメソッド内の場合:

[self runProgram]

この場合、selfはオブジェクトインスタンス自体を意味するため、ランタイムエラーが生成されます。使いたい

[[self class] runProgram]

代わりに。

ただし、別のクラスメソッドからこのメソッドを呼び出すと、

[self runProgram]

selfがクラス自体を参照するようになったためです。使用しないでください

[Calculator runProgram]

その場合、クラスのサブクラスが、オーバーライドされる可能性のあるメソッドではなく、誤ってスーパークラス '(Calculator's)メソッドを呼び出すためです。

32
user529758