Это наиболее легко объясняется кратким примером. Скажем, у меня есть следующие определения протокола и класса:Как тестировать класс Objective-C, чтобы определить, реагирует ли он на статический селектор (метод класса)?
@protocol ProtocolA <NSObject>
@optional
+ (BOOL)methodA;
@end
@interface ClassA : NSObject <ProtocolA>
@end
ClassA
может или не может определить methodA
. Если я работал с экземпляром ClassA
и методом экземпляра, я мог бы протестировать экземпляр с помощью respondsToSelector:
. В этой ситуации, однако, я не могу придумать какой-либо чистый способ определить, определяет ли ClassA
(отвечает) methodA
.
EDIT: я был глуп и не сделал мой пример достаточно конкретным, что означал ответ на этот вопрос был не совсем решением моей проблемы - так я включаю немного большой код и предупреждение I я получаю:
Class <ProtocolA> classRef = [ClassA class];
if([classRef respondsToSelector:@selector(methodA)]) {}
Приведенный выше код выдает следующее предупреждение: «метод Instance„respondsToSelector:
“найден вместо метода класса« respondsToSelector:
»
Я только сейчас заметил, что если я явно отливать classRef
- (Class)
, тогда предупреждение уходит. Я все еще нахожу это странным.
Спасибо. Вы абсолютно правы, но я понял, что мой вопрос не совсем подходит к проблеме, которую я испытываю. Не возражаете ли вы взглянуть и посмотреть, можете ли вы объяснить предупреждение, которое я получаю, что, похоже, не должно быть там? – Mathew
Это кажется мне очень странным, потому что вы объявляете его как линию класса! Это не только вы, я сам пробовал и получал такое же предупреждение. Я обнаружил, что если я сниму на первой строке, предупреждение исчезнет. Интересно, это ошибка компилятора? –
Lance
Ну, в конечном счете, несущественно, что я знаю, что он работает и должен работать таким образом. Благодаря! – Mathew