2010-12-06 5 views
23

Temel sınıfımdan devralan sınıfların belirli bir yöntemi geçersiz kılmaya zorlanması için bunu nasıl yapabilirim? Bir protokol kullanmak istemiyorum, çünkü bu davranış otomatik hale getirilmeyecek.Çocuk sınıflarını geçersiz kılma yöntemine zorla

@interface MyBaseClass : NSObject 
{ 
} 

- (void)performAnAction; 

@end 

@implementation MyBaseClass 

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

@end 

cevap

45

Tam olarak, bunları geçersiz kılmak için onları zorlamak ne demek istiyorsunuz? sadece şöyle ebeveyn yöntemini uygularsanız: çocuk sınıfı, geçersiz kılmak için başarısız olursa

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

o zaman zamanında bir istisna olacak. Ne yazık ki bunu derleme zamanında uygulamak için hiçbir yolu yoktur.

+0

Bu yüzden bir uyarı görüntülemek mümkün değil mi? – aryaxt

+1

Hayır. Sadece sınıfı uygun şekilde belgeleyin, böylece bu yöntemin geçersiz kılınması gerektiği açıktır. –

+0

Alt sınıf çağrıları [super performAction]; –

1

Sadece bir istisna atabilirsiniz. Bu iyi belgelenmiş olduğu sürece, IMO bu gerçekten bir programlama hatası olduğu için istisnaların makul bir kullanımıdır.