Was ist falsch daran, eine Kategorie in NSObject zu verwenden, um eine Standardprotokollimplementierung bereitzustellen?

Ich habe nach einer Möglichkeit gesucht, optionale Protokollmethoden zu verwenden und sauberen Code zu haben. Mit anderen Worten:
1: NeinrespondsToSelector: Anrufe überall in meinem Code
2. Sollte für jede Methodensignatur funktionieren, so führt eine Kategoriemethode auf NSObject die Prüfung durch und ruft aufperformSelector: ist aus (und NSInvocation hat Probleme mit der Zusammenarbeit mit ARC)
3: DasLösung, IMO, gibt vor, universell zu sein, hat aber alle Nachteile von 1

Ich kam schließlich auf diese Idee:

@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

Es scheint zu funktionieren, d.h .:

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

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

Obwohl dieses Problem in vielen Onlineangeboten diskutiert wird, bin ich nicht auf diese Lösung gestoßen, was mich zu der Annahme veranlasst, dass etwas daran nicht stimmt - ein wichtiger Fall, bei dem es fehlschlägt oder unvorhersehbar ist.

Soll ich es einfach machen, oder sind meine Bedenken berechtigt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage