2011-11-27 18 views
5

Quiero saber si la superclase implementa el método A de mi subclase, que también implementa el método A, por lo que puedo llamar de forma segura [SUPER A] de mi subclase sin obtener una excepción.¿Cómo puedo averiguar si la superclase también implementa el mismo método que implementa mi subclase?

respondsToSelector de NSObject: no funciona en este caso, ya que siempre devolverá verdadero (porque mi subclase implementa el método en cuestión). ¿Algunas ideas?

Respuesta

12

Se puede utilizar el método de la clase instancesRespondToSelector: para hacer esto. Por lo tanto, desde la subclase puede llamar al [[self superclass] instancesRespondToSelector:@selector(...)] para determinar si la superclase implementa el método que necesita.

+0

Lo que es equivalente para los métodos de la clase? por ejemplo, quiero probar si un selector de nivel de clase está en super clase o en subclase? – jAckOdE

0

Intenta [[[clase de auto] superclase] instancesRespondToSelector: (.) ​​@selector]]]

[súper respondsToSelector:] invoca la aplicación de la superclase de respondsToSelector, lo que probablemente la misma que la clase actual de. Hace no comprueba si la superclase implementa el método.

2

Llamar a [[self superclass] instancesRespondToSelector:@selector(...)] no funcionará, si la clase que lo implementa tiene una subclase y se invoca el método en la instancia de la clase subclase. Una solución consiste en introducir explícitamente el nombre de la clase que lo implementa actual:

[[ExplicitClassName superclass] instancesRespondToSelector:@selector(...)] 
Cuestiones relacionadas