Вызов методов класса с помощью имени класса vs self

Предположим, что у нас есть класс с именем Calculator. В нем есть метод класса, называемый runProgram. Если бы я хотел вызвать этот метод класса, внутри реализации класса, какая разница между этими двумя:

[Calculator runProgram]

ИЛИ

[self runProgram]

Являются ли они одинаковыми?

Ответы

Ответ 1

Если внутри метода экземпляра:

[self runProgram]

в этом случае self означает сам экземпляр объекта и, следовательно, он будет генерировать ошибку времени выполнения. Вы хотите использовать

[[self class] runProgram]

вместо.

Однако, если вы вызываете этот метод из другого метода класса, тогда

[self runProgram]

является правильным, так как теперь self относится к самому классу. Я не рекомендую использовать

[Calculator runProgram]

потому что тогда подклассы класса ошибочно вызывают метод superclass '(Calculator) вместо возможного переопределенного метода.