我的超类目前有以下初始化方法:

- (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上方

10-08 07:29