2010-12-06 18 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

+1

このメソッドをオーバーライドする必要があることは明らかです。 –

+0

サブクラスが[super performAction]を呼び出した場合、これは機能しません。 –

1

ただ例外をスローすることができます。これが十分に文書化されている限り、IMOは本当にプログラミングエラーであるため、例外の合理的な使用です。