【问题标题】:How do I make a super class's custom init method only internally visible to its subclasses?如何使超类的自定义 init 方法仅在其子类内部可见?
【发布时间】:2023-03-08 01:59:01
【问题描述】:

我的超类目前有这个初始化方法:

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

有没有办法解决这个问题?

【问题讨论】:

标签: ios objective-c inheritance


【解决方案1】:

是的,您可以在您的超类中实现 initWithFoo,并在您的孩子中进行“扩展”声明:

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

确保将该声明放在您孩子的 .m 文件中的 @implementation 上方

【讨论】:

  • 完美,谢谢!我完全忘记了我能做到这一点:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2012-11-07
  • 2018-11-05
相关资源
最近更新 更多