2010-05-20 17 views
14

Si vous implémentez une sous-classe, vous pouvez, dans votre implémentation, appelez explicitement la méthode de superclasse, même si vous avez redéfinie méthode, à savoir:Comment appelez-vous une méthode pour la super-classe d'un objet Objective-C d'ailleurs?

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

Que faire si vous voulez appeler la méthode de la superclasse de quelque part en dehors de la mise en œuvre de la sous-classe, à savoir:

[[object super] overriddenMethod]; //crashes 

Est-ce encore possible? Et par extension, il est possible d'aller jusqu'à plus d'un niveau dans la mise en œuvre, à savoir:

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

Répondre

20

Une option plus agréable (pour le débogage) est d'ajouter une méthode de catégorie qui fait pour vous:

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

Le fait qu'il n'y a pas moyen plus pratique de le faire est très bien par la conception.

13

Vous pouvez envoyer [[[object class] superclass] methodForSelector: ...] et appeler via le pointeur IMP directement, si vous voulez ... mais si vous êtes Pour ce faire, il y a probablement quelque chose qui ne va pas dans la conception de votre application.

+1

Non conçu. Besoin de cela pour le débogage. – executor21

+0

Dans ce cas, IMP away. :) –