2008-12-14 10 views
2

Est-il possible d'obtenir une liste de toutes les classes descendantes d'une classe particulière dans objective-c?Énumération descendante dans Objective-C

Quelque chose comme:

@interface A : NSObject 
    @end 

    @interface B : A 
    @end 

    @interface C : A 
    @end 

    NSArray *descendants = [A allDescendants]; // descendants = [B, C] 

Répondre

5

La seule façon que je peux penser est d'énumérer la liste complète des classes dans l'exécution (obtenu avec objc_getClassList) et de tester chacun pour isKindOfClass:A.

Ceci est probablement la seule solution car les classes ne maintiennent pas de liens vers leurs descendants (uniquement vers leur super-classe).

0

Pourriez-vous utiliser le membre de la classe en quelque sorte? L'appel [[A class] superclass] renvoie une instance de la classe Class pour la superclasse de self. Je pense que vous pouvez obtenir le nom d'une classe à partir de son Class - cela ferait-il ce que vous voulez?

Cela ne gère pas vraiment les protocoles, mais peut-être que cela vous indiquera au moins dans la bonne direction.