假设Apple在私有头文件中定义了API:
// Can't see this at all
@interface NSThing
- (void)secretMethod;
@end
我有一个类别:
@interface NSThing (Helpers)
- (void)secretMethod;
@end
这会覆盖Apple的实现吗?他们的其他私有方法是否会开始调用我的实现?
答案 0 :(得分:7)
来自"Avoid Category Method Name Clashes":
如果类别中声明的方法的名称与方法相同 在原始类中,或在另一个类别中的方法相同 class(甚至是超类),行为未定义为哪个 方法实现在运行时使用。这不太可能是一个 如果您使用自己的类别的类别,但可能导致问题 使用类别将方法添加到标准Cocoa或。时的问题 Cocoa Touch课程。
因此,如果您“意外”实现了与其名称相同的类别方法 现有方法(私有或非私有),行为未定义。
因此,您应该在类别方法前加上前缀 名字冲突不太可能。