[抱歉我的英语不好]
我有五个特定但类似的类S
的常用超类B1
,
B2
,B3
,B4
和B5
。
我想将'common'(每个B的代码类似)代码放到S,(并通过[super myCommonFunction]
调用它)。
应该没问题,但问题是myFunction需要从内部调用
来自B1
,B2
,B3
,B4
,B5
的特定函数(它是相同的类型函数,没有参数,甚至可以在每个),
如何从'superclass'调用self
方法?
答案 0 :(得分:3)
您需要做的就是声明要在超类中调用的方法,如果需要,可以将其保留为空,或者提供默认实现。
然后,您只需在每个子类中提供进一步的实现,覆盖超类方法。
然后当你需要从超类中调用方法时,你只需使用[self myMethod]
,而是调用正确的子类方法。
答案 1 :(得分:0)
如果我确定后代类中的方法总是具有相同的名称,那么@Tom建议的方法是我将使用的方法。如果名称可以根据任意条件而变化,那么这是另一种非常灵活的方法。您需要更改方法签名以符合您的要求:
typedef id (^common_function_callback_t)(void);
@interface S : ...
- (id) commonFunctionWithCallback:(common_function_callback_t) callback;
@end
@implementation S
- (id) commonFunctionWithCallback:(common_function_callback_t) callback
{
// ...
id someIntermediateResult = callback();
// ...
return someFinalResult;
}
@end
@implementation B1 // Similar for all other B's
- (id) myFunction
{
id someThing = ...;
id someStuff = [self commonFunctionWithCallback:^() {
return someThing;
}];
// ...
return someOtherResult;
}
@end
答案 2 :(得分:-1)
据我了解,您希望从S
类调用不同的方法,具体取决于哪个子类称为commonFunction
?如果是这样 - 您只需检查self
的实例是什么,不要拨打[super commonFunction]
,而是[self commonFunction]
。这将自动调用[super commonFunction]
,因为self
继承自super
。