web-dev-qa-db-fra.com

Objective-C Runtime: meilleur moyen de vérifier si la classe est conforme au protocole?

J'ai une classe (mais pas d'instance) et j'ai besoin de savoir si elle est conforme à un certain protocole. Cependant, Class peut être sous-classé plusieurs fois et class_conformsToProtocol () ignore les protocoles déclarés sur les superclasses.

Je pourrais simplement utiliser class_getSuperclass () et vérifier de manière récursive toutes les classes de la hiérarchie vers le haut jusqu'à ce que la superclasse soit nulle. Cependant, je me demande si cela pourrait être inefficace pour des hiérarchies de classes profondément imbriquées, et peut-être qu'il y a une meilleure façon de le faire?

En d'autres termes, comment la méthode NSObject conformsToProtocol peut-elle être mieux implémentée à l'aide des méthodes d'exécution Objective-C afin de trouver les protocoles sur les superclasses?

 [myObject conformsToProtocol:@protocol(MyProtocol)];

Si je suis sur la bonne voie et que je monte récursivement dans la hiérarchie des classes, faites le moi savoir.

166
LearnCocos2D

selon les docs ,

[MyClass conformsToProtocol:@protocol(MyProtocol)];

devrait marcher.

297
Wevah

Ou, s'il s'agit d'un pointeur général, comme:

Class<MyProtocol> someClassPointer = nil;

vous pouvez utiliser:

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];
2
Nikita