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



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

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

我有一个类别:

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

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

来自 "避免类别方法名称冲突":

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

因此,如果您"不小心"实现了与现有方法(私有或非私有),行为是未定义的

因此,您应该在类别方法前面加上一个前缀,使名称冲突的可能性不大。

相关内容

最新更新