Что плохого в использовании категории в NSObject для обеспечения реализации протокола по умолчанию?

Я искал способ использовать дополнительные методы протокола и иметь чистый код. Другими словами:
1: нетrespondsToSelector: звонки по всему моему коду
2. Должен работать для любой сигнатуры метода, поэтому метод категории в NSObject делает проверку и вызовperformSelector: отсутствует (и NSInvocation имеет проблемы с сотрудничеством с ARC)
3: эторешение, IMO, претендует на универсальность, но имеет все недостатки 1

В конце концов я пришел с этой идеей:

@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

Вроде работает, т.е.

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

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

Хотя многие места в Интернете обсуждают эту проблему, я не сталкивался с этим решением, которое заставляет меня думать, что с ним что-то не так - какой-то серьезный случай, когда оно не удастся или будет непредсказуемым.

Должен ли я просто сделать это, или мои опасения актуальны?

Ответы на вопрос(1)

Ваш ответ на вопрос