我的超类目前有以下初始化方法:
- (id)initWithFoo:(int)foo;
在子类中,我有一个自定义的init方法,像这样调用其超类的init。 Bar是子类专有的。
-(id)initWithFoo:(int)foo Bar:(int)bar {
if (self = [super initWithFoo:foo]){
_bar = bar;
}
return self;
}
创建子类的实例时会遇到问题,因为编译器很高兴在子类实例的可能的初始化方法列表中建议超类init方法,我绝对不希望这样做。
但是,如果我从超类的.h文件中删除initWithFoo:(int)foo,则子类将无法在其自己的init方法中使用它。
有没有办法解决?
最佳答案
是的,您可以在您的超类中实现initWithFoo并在您的孩子中进行“扩展”声明:
@interface SuperClass()
- (instancetype)initWithFoo:(int)foo;
@end
确保将该声明放在孩子的.m文件中@implementation上方