2014-06-12 52 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