2010-08-08 17 views
159

Ho una classe (ma nessuna istanza) e ho bisogno di sapere se è conforme ad un certo protocollo. Tuttavia, Class può essere sottoclasse più volte e class_conformsToProtocol() ignora i protocolli dichiarati sulle superclassi.Runtime Objective-C: il modo migliore per verificare se la classe è conforme al protocollo?

Potrei semplicemente usare class_getSuperclass() e controllare in modo ricorsivo tutte le classi nella gerarchia verso l'alto finché la superclasse è nulla. Tuttavia mi chiedo se questo potrebbe essere inefficiente per gerarchie di classi profondamente annidate, e forse c'è un modo più bello per farlo?

In altre parole, in che modo il metodo NSObject si conforma a Protocollo migliore implementato utilizzando i metodi runtime Objective-C in modo che trovi i protocolli sulle superclassi?

[myObject conformsToProtocol:@protocol(MyProtocol)]; 

Se sono sulla strada giusta con ricorsivamente in risalita la gerarchia di classi fammelo sapere.

risposta

283

According to the docs,

[MyClass conformsToProtocol:@protocol(MyProtocol)]; 

dovrebbe funzionare.

+4

Hai ragione. Era tardi e nessun suggerimento sul completamento del codice è stato fatto da Xcode. Ho controllato la definizione di Class e ho visto che era "typedef struct objc_class * Class" Non ho controllato il riferimento alla classe NSObject. – LearnCocos2D

1

Oppure, nel caso in cui si tratta di un puntatore generico, come:

Class<MyProtocol> someClassPointer = nil; 

è possibile utilizzare:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)]; 
Problemi correlati