Calculator
という名前のクラスがあるとします。その中にはrunProgram
と呼ばれるクラスメソッドがあります。クラスの実装内でこのクラスメソッドを呼び出す場合、これらの2つの違いは次のようになります。
[Calculator runProgram]
OR
[self runProgram]
これらは両方とも同じですか?
インスタンスメソッド内の場合:
[self runProgram]
この場合、self
はオブジェクトインスタンス自体を意味するため、ランタイムエラーが生成されます。使いたい
[[self class] runProgram]
代わりに。
ただし、別のクラスメソッドからこのメソッドを呼び出すと、
[self runProgram]
self
がクラス自体を参照するようになったためです。使用しないでください
[Calculator runProgram]
その場合、クラスのサブクラスが、オーバーライドされる可能性のあるメソッドではなく、誤ってスーパークラス '(Calculator
's)メソッドを呼び出すためです。