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

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

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

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

 [myObject conformsToProtocol:@protocol(MyProtocol)];

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

Ответы [ 2 ]

297 голосов
/ 09 августа 2010

По документам ,

[MyClass conformsToProtocol:@protocol(MyProtocol)];

должно работать.

2 голосов
/ 11 мая 2017

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

Class<MyProtocol> someClassPointer = nil;

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

[someClassPointer.class conformsToProtocol:@protocol(MyProtocol)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...