我想使用 NSArray + Populate.h 类扩展一个类:
@interface NSArray (Populate)
-(NSArray *) populateArray;
@end
如果有其他类别(来自其他模块或库),使用同名方法扩展NSArray,如何检测情况?
例如,如果有 NSArray + Fill.h :
@interface NSArray (Fill)
-(NSArray *) populateArray;
@end
据我所知,运行时引擎会默默地选择其中一个版本,而不会发生任何崩溃?
答案 0 :(得分:7)
您无法检测到这种情况,也无法确定-populateArray
的哪个实现优先。由于这个原因,一些开发人员更喜欢为他们的类别方法名称添加前缀。
引用The Objective-C Programming Language文件,
类别无法可靠地覆盖在同一类的另一个类别中声明的方法。
这个问题特别重要,因为许多Cocoa类都是使用类别实现的。您尝试覆盖的框架定义方法本身可能已在类别中实现,因此未定义优先级高的实现。