【问题标题】:Extending a class using categories with identical methods name使用具有相同方法名称的类别扩展类
【发布时间】:2011-01-21 23:35:51
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

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

    引用The Objective-C Programming Language文档,

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-29
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多