O que há de errado em usar uma categoria no NSObject para fornecer uma implementação de protocolo padrão?

Eu tenho procurado uma maneira de usar métodos de protocolo opcionais e ter código limpo. Em outras palavras:
1: nãorespondsToSelector: chama todo o meu código
2. Deve funcionar para qualquer assinatura de método, portanto, um método de categoria no NSObject fazendo a verificação e chamandoperformSelector: está fora (e o NSInvocation tem problemas em cooperar com o ARC)
3: issosolução, IMO, finge ser universal, mas tem todos os inconvenientes de 1

Eu acabei chegando com essa ideia:

@protocol MyProtocol <NSObject>
@optional
-(void)optionalMethod;
@end

@interface ClassA : NSObject <MyProtocol>
@end

@implementation ClassA

-(void)optionalMethod{
     NSLog(@"ClassA implements optionalMethod");
}

@end

@interface ClassB : NSObject <MyProtocol>
@end

@implementation ClassB
//classB does not implement optionalMethod
@end

@interface NSObject (DefaultMyProtocolImplementation)
-(void)optionalMethod;
@end

@implementation NSObject (DefaultMyProtocolImplementation)
-(void)optionalMethod{
     NSLog(@"%@ does not implement optionalMethod", NSStringFromClass([self class]));
}
@end

Parece funcionar, ou seja:

...
ClassA *objA = [[ClassA alloc] init];
ClassB *objB = [[ClassB alloc] init];

[objA optionalMethod]; //prints "ClassA implements optionalMethod"
[objB optionalMethod]; //prints "ClassB does not implement optionalMethod"

Embora muitos lugares on-line discutam esse problema, não encontrei essa solução, o que me faz pensar que há algo errado com ela - um caso importante em que ela falhará ou será imprevisível.

Devo apenas fazê-lo ou minhas preocupações são válidas?

questionAnswers(1)

yourAnswerToTheQuestion