@interface MySuperclass : NSObject {
}
@end
@interface MySuperclass (MyCategory)
- (void)myMethod;
@end
@interface MySubclass : MySuperclass {
}
@end
@interface MySubclass (MyOtherCategory)
- (void)myMethod;
@end
是否定义了将调用-myMethod的哪个实现?
Kochan在Objective-C编程中指出:
如果多个类别为同一个类声明了一个具有相同名称的方法,则不会定义在调用时将执行哪个方法。
但我不确定在这种情况下,超类上的类别是否被视为同一类别的类别。
答案 0 :(得分:3)
虽然我找不到参考文献,但我认为MySubclass (MyOtherCategory)
中的实现显然优先。类别的方法被添加到该特定类中,因此“MyOtherCategory”实现将属于您的子类,并且在消息发送期间进入超类之前将对其进行查找。
正如Objective-C手册中所指出的,Cocoa中的许多方法都被分类。如果没有很好地定义查找顺序,则不能覆盖子类中类别中的任何方法,这会使类别几乎无用。
答案 1 :(得分:1)
我的直觉说你会没事的,但唯一知道的方法就是尝试。我相信不确定性只在同一个类中,而不是超级/子类关系。