2010-05-20 15 views
14

Se stai attuazione di una sottoclasse, è possibile, all'interno della vostra implementazione, chiamare esplicitamente il metodo della superclasse, anche se hai scavalcato quel metodo, vale a dire:Come si chiama un metodo per una superclasse dell'oggetto Objective-C da altrove?

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

Che cosa succede se si desidera chiamare il metodo della superclasse da qualche parte al di fuori dell'implementazione della sottoclasse, ovvero:

[[object super] overriddenMethod]; //crashes 

È possibile? E per estensione, è possibile salire più di un livello entro l'attuazione, vale a dire:

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

risposta

20

Un'opzione più piacevole (per il debug) è quello di aggiungere un metodo categoria che fa per voi:

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

Il fatto che non ci sia modo più conveniente per fare questo è molto di progettazione.

13

È possibile inviare [[[object class] superclass] methodForSelector: ...] e richiamare tramite il puntatore IMP direttamente, se vuoi ... ma se siete facendo questo, probabilmente c'è qualcosa di molto sbagliato nel design della tua applicazione.

+1

Non progettazione. Hai bisogno di questo per il debug. – executor21

+0

In tal caso, IMP via. :) –

Problemi correlati