1
@interface MySuperclass : NSObject {

}

@end

@interface MySuperclass (MyCategory)

- (void)myMethod;

@end

@interface MySubclass : MySuperclass {

}

@end

@interface MySubclass (MyOtherCategory)

- (void)myMethod;

@end

是否定义了将调用 -myMethod 的哪个实现?

Kochan 在 Objective-C 编程中指出:

如果多个类别为同一个类声明了同名的方法,则不定义调用时将执行哪个方法。

但我不确定在这种情况下,超类上的类别是否被视为同一类上的类别。

4

2 回答 2

3

虽然我找不到参考,但我认为很明显,实现MySubclass (MyOtherCategory)优先。类别的方法被添加到该特定类中,因此“MyOtherCategory”实现将属于您的子类,并且在消息发送期间继续查找超类之前将对其进行查找。

正如 Objective-C 手册中所指出的,Cocoa 中的很多方法都放在类别中。如果查找的顺序没有很好地定义,您就不能在子类的类别中覆盖任何这些方法,这会使类别几乎毫无用处。

于 2010-07-28T21:37:17.547 回答
1

我的直觉说你会没事的,但唯一知道的方法就是尝试。我相信不确定性只存在于同一个类中,而不是超/子类关系。

于 2010-07-28T20:47:24.977 回答