如何使超类的自定义init方法仅在其子类内部可见?

时间:2015-07-16 08:41:28

标签: ios objective-c inheritance

我目前为我的超类提供了这个init方法:

- (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方法中使用它了。

有什么方法吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以在你的超类中实现initWithFoo,并在你的孩子中做一个“扩展”声明:

@interface SuperClass()
- (instancetype)initWithFoo:(int)foo;
@end

请务必将@implementation上方的声明放在您孩子的.m文件中