2011-01-21 117 views
3

我想用类别的NSArray + Populate.h扩展类:扩展使用类别具有相同方法的类名

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

我如何可以检测的情况,如果有其他类别(从另一个模块或库),使用同名的方法扩展NSArray?

例如,如果有一个的NSArray + Fill.h

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

据我了解,在运行时引擎会选择默默的版本之一,没有任何崩溃?

回答

7

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

引用The Objective-C Programming Language文件,

一个类别不能可靠地覆盖在同一类的其他类声明的方法。

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

相关问题