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.