我有以下类/协议:
@interface Super
@end
@implementation Super
@end
@interface Sub1
@end
@implementation Sub1
@end
@interface Sub2
@end
@implementation Sub2
@end
@protocol FooProtocol
- (void) foo;
@end
@interface Sub1 (FooCategory) <FooProtocol>
@end
@implementation Sub1 (FooCategory)
- (void) foo {}
@end
@interface Sub2 (FooCategory) <FooProtocol>
@end
@implementation Sub2 (FooCategory)
- (void) foo {}
@end
@interface Super (FooCategory) <FooProtocol>
@end
// Notice that there is no @implementation Super (FooCategory)
这允许我编写一个类似的函数:
void callFoo(NSArray *supers) {
for (Super *theSuper in supers) {
[theSuper foo];
}
}
Sub1
和Sub2
是Super
仅有的两个子类。我本质上想要类别方法中的多态性。如果我指定@interface
for Super
,但提供 no @implementation
,clang 不会给我任何警告/错误。
这是一个非常糟糕的黑客行为吗?
潜在的不利因素是什么?