クラスがありますが(インスタンスはありません)、特定のプロトコルに準拠しているかどうかを知る必要があります。ただし、Classは複数回サブクラス化でき、class_conformsToProtocol()はスーパークラスで宣言されたプロトコルを無視します。
Class_getSuperclass()を使用して、スーパークラスがnilになるまで階層内のすべてのクラスを再帰的にチェックできます。しかし、深くネストされたクラス階層ではそれが非効率かもしれませんし、おそらくもっと良い方法がありますか?
言い換えると、NSObjectメソッドは、Objective-Cランタイムメソッドを使用して、スーパークラスでプロトコルを見つけるために、どのようにconformsToProtocolを最適に実装していますか?
[myObject conformsToProtocol:@protocol(MyProtocol)];
クラス階層を再帰的に上回って正しい方向に進んでいる場合はお知らせください。
または、次のような一般的なポインタの場合:
Class<MyProtocol> someClassPointer = nil;
次を使用できます。
[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];