2010-05-20 17 views
14

Si va a implementar una subclase, puede, dentro de su aplicación, llamar explícitamente al método de la superclase, incluso si se ha redefinido ese método, es decir:¿Cómo se llama a un método para la superclase de un objeto Objective-C desde otro lugar?

[self overriddenMethod]; //calls the subclass's method 
[super overriddenMethod]; //calls the superclass's method 

¿Qué pasa si usted quiere llamar al método de la superclase desde algún lugar fuera de la implementación de la subclase, es decir:

[[object super] overriddenMethod]; //crashes 

¿Esto es posible? Y, por extensión, es posible ir hasta más de un nivel dentro de la aplicación, es decir:

[[super super] overriddenMethod]; //will this work? 

Respuesta

20

Una opción más agradable (para depuración) es agregar un método categoría, que lo hace por usted:

- (void) callSuperMethod { [super overriddenMethod]; } 

El hecho de que no es la manera más conveniente de hacer esto es en gran medida por el diseño.

13

Puede enviar [[[object class] superclass] methodForSelector: ...] e invocar a través del puntero IMP directamente, si quieres ... pero si usted está Al hacer esto, probablemente haya algo muy incorrecto en el diseño de su aplicación.

+1

No diseño. Necesito esto para la depuración. – executor21

+0

En ese caso, IMP de distancia. :) –

Cuestiones relacionadas