使用具有相同方法名称的类别扩展类

时间:2011-01-21 23:35:51

标签: iphone objective-c ios

我想使用 NSArray + Populate.h 类扩展一个类:

@interface NSArray (Populate)
-(NSArray *) populateArray; 
@end

如果有其他类别(来自其他模块或库),使用同名方法扩展NSArray,如何检测情况?

例如,如果有 NSArray + Fill.h

@interface NSArray (Fill)
-(NSArray *) populateArray; 
@end

据我所知,运行时引擎会默默地选择其中一个版本,而不会发生任何崩溃?

1 个答案:

答案 0 :(得分:7)

您无法检测到这种情况,也无法确定-populateArray的哪个实现优先。由于这个原因,一些开发人员更喜欢为他们的类别方法名称添加前缀。

引用The Objective-C Programming Language文件,

  

类别无法可靠地覆盖在同一类的另一个类别中声明的方法。

     

这个问题特别重要,因为许多Cocoa类都是使用类别实现的。您尝试覆盖的框架定义方法本身可能已在类别中实现,因此未定义优先级高的实现。