ios - 如何使父类(super class)的自定义 init 方法仅对其子类内部可见?

标签 ios objective-c inheritance

目前我的父类(super class)有这个初始化方法:

- (id)initWithFoo:(int)foo;

在一个子类中,我有一个自定义的 init 方法调用它的父类(super class)的 init,就像这样。 Bar 是子类独有的。

-(id)initWithFoo:(int)foo Bar:(int)bar {
    if (self = [super initWithFoo:foo]){
        _bar = bar;
    }
    return self;
}

我在创建子类的实例时遇到了问题,因为编译器很乐意在我的子类实例的可能初始化方法列表中建议父类(super class) init 方法,我绝对不希望这样。

但是,如果我从父类(super class)的 .h 文件中删除 initWithFoo:(int)foo,那么子类就不能再在它们自己的初始化方法中使用它。

有什么办法解决这个问题吗?

最佳答案

是的,您可以在您的父类(super class)中实现 initWithFoo,并在您的子类中进行“扩展”声明:

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

确保将该声明放在您 child 的 .m 文件中的@implementation 之上

关于ios - 如何使父类(super class)的自定义 init 方法仅对其子类内部可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31449349/

相关文章:

ios - Swift:向下滚动时下拉溢出消失

ios - 混合 iOS UIKit 和 Cocos2d

ios - 以编程方式访问图像 Assets

c# - 业务对象集合在不扩展 Collection<T> 时是否应该继承它?

c++ - 在 C++ 中从抽象基类访问派生类的信息

ios - 获取谷歌电子表格 ios

ios - 当键盘从堆栈溢出中出现时无法获得任何滚动 TextView 的响应

ios - 谷歌退出 iOS

c++ - 多重继承 C++

ios - AVSynchronizedLayer 不同步动画