2014-02-14 36 views
5

说,苹果在私人头文件中定义的API:如果我意外覆盖Apple的私有API,会发生什么情况?

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

,我有一个类别:

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

这是否超越苹果的实施,将他们的其他私有方法开始打电话到我实施?

回答

7

"Avoid Category Method Name Clashes"

如果在一个类中声明的方法的名称是一样的,在原来的类中的方法 ,或在同一 类其他类别的方法(甚至是超类),行为是不确定的,因为在运行时使用哪个方法实现。如果您使用自己的类使用类别,但如果使用类别将方法添加到标准Cocoa或 Cocoa Touch类,可能会导致 问题,因此这不太可能是 问题。

所以,如果你“不小心”的同名实行分类方法 现有的方法(私有或没有),则该行为是未定义

因此,您应该在类别方法的前面添加一个前缀,使名称冲突不太可能发生 。

+0

如果Apple在它们的私有选择器前面加上下划线,它也会有所帮助,但它们并不总是这样做。感谢您的参考。 – ide

+0

@ide:非常真实。甚至有私人*类*没有NS,UI或前缀的东西。 –

相关问题