我不同意给出的答案:
A.: 不是真的,那个类的方法战胜了类的方法。这是一个实现细节,但未定义行为。
如果在一个类别中声明的方法的名称与原始类中的方法相同,或者与同一类(甚至是超类)上的另一个类别中的方法相同,则对于在哪个方法实现中使用的行为是不确定的运行。
B. 但这没关系。您既没有在类中定义的类别中定义方法,也没有在两个冲突的类别中定义方法。城市。根本不适用于您的情况。它适用于这样的事情:
@interface A : NSObject
- (void)doSomething;
@end
@implementation A
- (void)doSomething {}
@end
@interface A (Addition)
- (void)doSomething;
@end
@implementation A (Addition)
- (void)doSomething {}
@end
如果我理解你是正确的,你不想这样做。你想要这样的东西:
基础等级:
@interface A : NSObject
@end
@implementation A
@end
@interface A (Addition)
- (void)doSomething;
@end
@implementation A (Addition)
- (void)doSomething {}
@end
这并没有违反规则,因为在类中没有方法,在类中。
子类级别:
@interface B : A
@end
@implementation B
@end
@interface B (Addition)
- (void)doSomething;
@end
@implementation B (Addition)
- (void)doSomething {}
@end
B 级别没有冲突,原因与 A 级别没有冲突相同。
有人可能会说,存在冲突,因为 B 从 A 继承了 -doSomething。但这不是冲突,因为在这种情况下应用了优先规则:子类覆盖方法。
你可以这样做。
编辑:
您只需将方法添加到类即可检查问题。那会编译吗?在冲突的情况下,它不会。在你的情况下,它会。