2014-06-12 34 views
0

我有我正在使用的以下代码。覆盖使用类别的方法,当该方法已在类别中定义

@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 

不准我碰他的代码。如果我只写了另一个类别,将调用哪个方法?我怎么能打电话给我的分类方法,而不是他?

+0

重写使用类别的方法是一个坏主意。行为是未定义的。 – rmaddy

+0

@rmaddy好的..在像我这样的情况下..是否有任何可能的解决方法?我无法触摸他的代码... –

回答

2

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

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

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

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

+0

它是非常好玩的。我对此有过想法但并不确定 –

+0

有一件事,当你说覆盖他的课时,你的意思是一个子类是对的吗? –

+0

哎呀,我当然可以!将编辑我的答案。 – Dima