2010-12-06 61 views
23

我該如何做到這一點,以便從我的基類繼承的任何類被強制重寫一個特定的方法?我不想使用協議,因爲這不會使此行爲自動化。強制子類重寫方法

@interface MyBaseClass : NSObject 
{ 
} 

- (void)performAnAction; 

@end 

@implementation MyBaseClass 

- (void)performAnAction 
{ 
    @throw([NSException exceptionWith...]); 
} 

@end 

回答

45

你究竟是什麼意思,迫使他們重寫它呢?如果你簡單地實現像這樣的父類的方法:

- (void)performAction { 
    NSAssert(NO, @"The method %@ in %@ must be overridden.", 
     NSStringFromSelector(_cmd), NSStringFromClass([self class])); 
} 

然後它會在運行時,如果子類沒有覆蓋它拋出一個異常。不幸的是,在編譯時沒有辦法強制執行。

+0

因此無法顯示警告嗎? – aryaxt 2010-12-06 22:58:57

1

你可以拋出異常。只要這是有據可查的,那麼IMO就是合理使用異常,因爲它確實是一個編程錯誤。