Статический метод протокола Objective-C?

У меня есть протокол в Objective-C, что-то вроде этого:

@protocol Handler
+(NSString*) getValue;
@end

Итак, теперь скажем, у меня есть экземпляр, который наследует этот протокол, и я хочу вызвать этот метод:

[handlerInstance getValue];

Это выдает предупреждение, поскольку метод getValue не является методом экземпляра. Как я могу правильно вызвать этот метод из моего экземпляра? (не зная конкретного класса)? Я предполагаю что-то вроде этого, но я не совсем уверен:

[[handlerInstance class] getValue];

person Kyle    schedule 06.03.2010    source источник


Ответы (1)


[[handlerInstance class] getValue];

Да, вот так.

В отличие от Java и C++, методы класса можно отправлять только классу.

person kennytm    schedule 06.03.2010
comment
Серьезно, я думаю, я не должен был догадываться! - person Kyle; 06.03.2010
comment
Не все из нас. Если вы попробуете это перед публикацией, это не даст другим пользы от этих знаний. Я пришел сюда в поисках того, как это будет себя вести, потому что 1.) это было быстрее, чем пробовать и 2.) если бы были подводные камни, о которых я не подумал, кто-то, вероятно, отметил бы их здесь. Таким образом, публиковать первыми меньше работы для всех, кто приходит позже. Спасибо Кенни и Zenox. - person Warren; 28.03.2014
comment
Итак, если у меня есть переменная id<Handler> handler, мне назначить instance или [instance class]? Будет ли это работать даже без доступного экземпляра? (Только Class)? - person chakrit; 01.06.2014
comment
@чакрит: [[instance class] getValue]. Если у вас Class cls, то сделайте [cls getValue]. Обратите внимание, что этот метод не будет выполняться, если handler == nil. - person kennytm; 04.06.2014
comment
В общем, точка методов класса не использует экземпляр. - person uchuugaka; 05.10.2014