【问题标题】:Override a method using a category, when that method was already defined in a category [duplicate]当该方法已在类别中定义时,使用类别覆盖方法[重复]
【发布时间】:2014-08-03 03:35:17
【问题描述】:

我正在使用以下代码。

@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

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

【问题讨论】:

  • 使用类别覆盖方法是个坏主意。行为未定义。
  • @rmaddy 好的..在我这样的情况下..有没有可能的解决方法?我不能碰他的密码...

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


【解决方案1】:

正如 rmaddy 所说,您正在做的不是一个好主意,并且会导致未定义的行为。您不应该尝试覆盖类别中的方法。如果您绝对无法触及现有代码,您可以合理地做两件事之一。

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

  2. 使用方法调配将方法实现与您的自定义实现交换,而不是覆盖。这也使您可以选择像适当的覆盖一样实现它,并在需要时在您的自定义方法中调用原始实现。

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

【讨论】:

  • 令人眼花缭乱。我有想法,但不确定
  • 有一件事,当你说 Override his class 时,你的意思是一个子类,对吧?
  • 糟糕,我当然愿意!将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 2011-07-13
  • 2012-06-29
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多