Respostas:
Há também a mensagem estática instancesRespondToSelector: (SEL) selector Você o chamaria assim:
[MyClass instancesRespondToSelector:@selector(someMethod:withParams:)]
ou assim:
[[myObject class] instancesRespondToSelector:@selector(someMethod:withParams:)]
Isso pode ser útil se você quiser chamar um construtor ou outro dependendo disso (quero dizer, antes de ter a própria instância).
Use respondsToSelector:. Da documentação :
respondsToSelector:
Retorna um valor booleano que indica se o receptor implementa ou herda um método que pode responder a uma mensagem especificada.
- (BOOL)respondsToSelector:(SEL)aSelectorParâmetros
aSelector - Um seletor que identifica uma mensagem.Valor de retorno
YESse o receptor implementa ou herda um método que pode responder a umSeletor , caso contrárioNO.
Você está procurando por respondsToSelector: -
if ([foo respondsToSelector: @selector(bar)] {
[foo bar];
}
Como Donal disse, o acima indica que foo definitivamente pode receber o seletor de barra. No entanto, se foo for um proxy que encaminha bar para algum objeto subjacente que receberá a mensagem bar, então respondsToSelector: dirá NÃO, mesmo que a mensagem seja encaminhada para um objeto que responde bar.
Verificar seletores com respondsToSelector normalmente é apenas para métodos delegados. Você não deve usar forwardInvocation ou proxies para métodos delegados. Se você precisar usar respondsToSelector em outras situações, certifique-se de que não haja uma maneira mais apropriada de projetar seu programa.
- forwardInvocation:).