web-dev-qa-db-ja.com

Objective-C Runtime:クラスがプロトコルに準拠しているかどうかを確認する最良の方法は?

クラスがありますが(インスタンスはありません)、特定のプロトコルに準拠しているかどうかを知る必要があります。ただし、Classは複数回サブクラス化でき、class_conformsToProtocol()はスーパークラスで宣言されたプロトコルを無視します。

Class_getSuperclass()を使用して、スーパークラスがnilになるまで階層内のすべてのクラスを再帰的にチェックできます。しかし、深くネストされたクラス階層ではそれが非効率かもしれませんし、おそらくもっと良い方法がありますか?

言い換えると、NSObjectメソッドは、Objective-Cランタイムメソッドを使用して、スーパークラスでプロトコルを見つけるために、どのようにconformsToProtocolを最適に実装していますか?

 [myObject conformsToProtocol:@protocol(MyProtocol)];

クラス階層を再帰的に上回って正しい方向に進んでいる場合はお知らせください。

166
LearnCocos2D

ドキュメントによると

[MyClass conformsToProtocol:@protocol(MyProtocol)];

動作するはずです。

297
Wevah

または、次のような一般的なポインタの場合:

Class<MyProtocol> someClassPointer = nil;

次を使用できます。

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