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

Mar*_*aev 3 iphone objective-c ios

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

@interface NSArray (Populate)
-(NSArray *) populateArray; 
@end
Run Code Online (Sandbox Code Playgroud)

如果有另一个类别(来自另一个模块或库),使用具有相同名称的方法扩展NSArray,如何检测情况?

例如,如果有NSArray + Fill.h:

@interface NSArray (Fill)
-(NSArray *) populateArray; 
@end
Run Code Online (Sandbox Code Playgroud)

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

小智 7

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

引用Objective-C编程语言文档,

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

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