我很难找到在Objective-C中实现类似于抽象类的方法。我想实际上并不关心如何限制使用我的基类而不创建子类,我想要的是这样的: 我想拥有类似于- (void)makeRequest
的方法的类A(父/基/抽象),并且我想要在B,C,D等类中进行子类化,并具有从类'A方法中调用的方法,如- (id)getCachedResult
。所以基本上我希望类A实现一些基本逻辑,我希望它的子类修改这个基本逻辑的一些细节和部分。从父进程调用子代方法
听起来像一个琐事,但我不能把我的手指在Objective-C中实现这种模式的方式。
UPDATE:
这里就是我想要做的事:
@interface A : NSObject
- (void)makeRequest;
- (NSString *)resultKey;
@property (strong) NSMutableDictionary * result;
@end
@implementation A
- (void)makeRequest
{
self.result[self.resultKey] = @"Result";
}
- (NSString *)resultKey
{
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"%@ should be overrided in subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
return nil;
}
@end
/////////////////////////////
@interface B : A
@end
@implementation B
- (NSString *)resultKey
{
return @"key";
}
@end
当我创建B类的实例,并试图调用它的方法- (void)makeRequest
我得到的例外,那就是很明显。我想要的是一种正确设计我的课程以达到同样目的的方法。
这是相当平凡的。这是子类化的基本概念。你的问题究竟在哪里?您应该提供一些具体的代码示例并用它来描述问题。当你做好每一件事 - 而且犯错的机会不多 - 那么它就会按照你描述它的方式工作。 – 2013-02-25 12:28:57
@HermannKlecker,好吧,我会更新我的问题,以更具体地说明我在哪里遇到问题。 – DemoniacDeath 2013-02-25 12:43:11
你应该在B的接口中声明'resultKey'。 – Matthias 2013-02-25 13:41:13