Objective-C Runtime: лучший способ проверить, соответствует ли класс протоколу?

У меня есть класс (но нет экземпляра) и нужно знать, соответствует ли он определенному протоколу. Тем не менее, класс может быть подклассифицирован несколько раз, а class_conformsToProtocol() игнорирует протоколы, объявленные на суперклассах.

Я мог бы просто использовать class_getSuperclass() и рекурсивно проверять все классы в иерархии вверх до тех пор, пока суперкласс не будет равен нулю. Однако я задаюсь вопросом, может ли это быть неэффективным для глубоко вложенных иерархий классов и, может быть, есть более хороший способ сделать это?

Другими словами, как метод NSObject соответствует методу TopProtocol, наилучшим образом реализованному с использованием методов времени выполнения Objective-C, чтобы найти протоколы на суперклассах?

 [myObject conformsToProtocol:@protocol(MyProtocol)];

Если я нахожусь на правильном пути с рекурсивным движением вверх по иерархии классов, просто дайте мне знать.

Ответ 2

Или, если это общий указатель, например:

Class<MyProtocol> someClassPointer = nil;

вы можете использовать:

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