objective-c class-method

objective c - Llamar a los métodos de clase a través del nombre de la clase frente a uno mismo



objective-c class-method (1)

Supongamos que tenemos una clase llamada Calculator . Hay un método de clase en él, llamado runProgram . Si quisiera llamar a este método de clase, dentro de la implementación de la clase, ¿cuál sería la diferencia entre estos dos?

[Calculator runProgram]

O

[self runProgram]

¿Son estos dos iguales?


Si dentro de un método de instancia:

[self runProgram]

en esto, self significa la instancia del objeto en sí, y por lo tanto generará un error de tiempo de ejecución. Quieres usar

[[self class] runProgram]

en lugar.

Sin embargo, si llama a este método desde otro método de clase, entonces

[self runProgram]

Es correcto, ya que ahora el self refiere a la propia clase. Me gustaría desalentar a usar

[Calculator runProgram]

porque entonces las subclases de la clase llamarían erróneamente el método de la ''superclase'' ( Calculator ) en lugar de un método posiblemente invalidado.