вот что я использую в случае явной структуры подкласса:
@class MyObject;
@interface MONBase : NSObject
/* required override */
-(MyObject *)doSomething;
/* ... */
@end
@implementation MONBase
/* ... */
-(MyObject*)doSomething
{
assert(0 && "this override is required");
return nil;
}
@end
однако ... протоколы часто как правило, более полезным в этих и подобных случаях. следующий способ показывает один из способов достижения этого. он реализует протокол и наследует от общей базы - использовать полученные от использования в OP:
@class MyObject;
@protocol MONProtocol
/* required overrides: */
@required
- (MyObject *)doSomething;
/* optional overrides: */
@optional
@end
/* base, with shared implementation */
@interface MONBase : NSObject
@end
@implementation MONBase
- (MyObject *)doSomething
{
/*
as long as the sig matches, you won't need to declare it in the interface -- that may be a good thing.
you may prefer *not* to implement this, if you favor a runtime exception
*/
assert(0 && "this MONProtocol override is required");
return nil;
}
@end
/* subclass of MONBase which extends by implementing MONProtocol */
@interface MONSub : MONBase <MONProtocol>
{
MyObject* theIvar; /* << simplest case implementation */
}
@end
@implementation MONBase
/* ... */
- (MyObject *)doSomething
{
return [[theIvar retain] autorelease];
}
@end
протоколов хороши, потому что они предоставляют множество преимуществ множественного наследования, и обеспечивают очень мало зависимостей.
Просто верните 'nil' в этом методе ... –