¿Qué tiene de malo usar una categoría en NSObject para proporcionar una implementación de protocolo predeterminada?

He estado buscando una manera de usar métodos de protocolo opcionales y tener código limpio. En otras palabras:
1: NorespondsToSelector: Llama a todo mi código
2. Debería funcionar para cualquier firma de método, por lo que un método de categoría en NSObject realiza la verificación y llamaperformSelector: está fuera (y NSInvocation tiene problemas para cooperar con ARC)
3: estesolución, IMO, pretende ser universal pero tiene todos los inconvenientes de 1

Finalmente se me ocurrió esta idea:

@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, es decir:

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

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

Si bien muchos lugares en línea discuten este problema, no me he topado con esta solución, lo que me hace pensar que tiene algún problema, un caso importante en el que fallará o será impredecible.

¿Debo hacerlo o mis preocupaciones son válidas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta