如果我不小心覆盖了Apple的私有API,会发生什么?

时间:2014-02-14 20:29:46

标签: ios objective-c

假设Apple在私有头文件中定义了API:

// Can't see this at all
@interface NSThing
- (void)secretMethod;
@end

我有一个类别:

@interface NSThing (Helpers)
- (void)secretMethod;
@end

这会覆盖Apple的实现吗?他们的其他私有方法是否会开始调用我的实现?

1 个答案:

答案 0 :(得分:7)

来自"Avoid Category Method Name Clashes"

  

如果类别中声明的方法的名称与方法相同   在原始类中,或在另一个类别中的方法相同   class(甚至是超类),行为未定义为哪个   方法实现在运行时使用。这不太可能是一个   如果您使用自己的类别的类别,但可能导致问题   使用类别将方法添加到标准Cocoa或。时的问题   Cocoa Touch课程。

因此,如果您“意外”实现了与其名称相同的类别方法 现有方法(私有或非私有),行为未定义

因此,您应该在类别方法前加上前缀 名字冲突不太可能。