Ответ 1
Если внутри метода экземпляра:
[self runProgram]
в этом случае self
означает сам экземпляр объекта и, следовательно, он будет генерировать ошибку времени выполнения. Вы хотите использовать
[[self class] runProgram]
вместо.
Однако, если вы вызываете этот метод из другого метода класса, тогда
[self runProgram]
является правильным, так как теперь self
относится к самому классу. Я не рекомендую использовать
[Calculator runProgram]
потому что тогда подклассы класса ошибочно вызывают метод superclass '(Calculator
) вместо возможного переопределенного метода.