当已在类别中定义该方法时,使用类别覆盖方法

时间:2014-06-12 17:42:43

标签: objective-c methods override objective-c-category

我有以下代码,我正在使用。

@interface SomeDudesSuperClass : NSObject {

}

@end

@interface SomeDudesSuperClass (Category_code_which_others_are_restricted_from_touching)

- (void)SomeDudesMethod;

@end

现在这是我的代码

@interface SomeDudesSuperClass (A_Category_To_Override_A_Method_in_his_category) {

- (void)SomeDudesMethod;

}

@end

我不允许触摸他的代码。如果我只是写另一个类别,将调用哪个方法?我怎样才能调用我的类别方法而不是他的?

1 个答案:

答案 0 :(得分:2)

正如rmaddy所说,你所做的并不是一个好主意,并会导致未定义的行为。您不应该尝试覆盖类别中的方法。如果您完全无法触及现有代码,则可以合理地执行以下两项操作之一。

  1. 子类SomeDudesSuperClass并覆盖那里的方法。

  2. 使用方法调配将方法实现与您的自定义实现交换而不是覆盖。如果需要,这还为您提供了实现此选项的选项,如正确覆盖并在自定义方法中调用原始实现。

  3. This article by Mike Ash has a very nice explanation of this