如何在 Objective-C 中使用自定义构造函数初始化自动成员

How can I initialize an automatic member with a custom constructor in Objective-C

我有一个带有自定义构造函数的 C++ class。

struct Inner {
    int i_;
    Inner(int i): i_(i) {}
};

我想将其用作 Objective-C class 的自动成员。

如果我在 C++ 中做同样的事情,我会将参数传递给初始化列表中成员的构造函数:

class Outer {
    Inner inner_;

    public:

    // Automatic member variables with custom constructors must
    // be initialized in the parent struct's initialization list.
    Outer(int i): inner_(i) {}

    // This will cause an error
    //Outer() {}

    int val() { return inner_.i_; }
};

在 Objective-C 中,它看起来像这样:

@interface Outer () {
    Inner inner_;
}
@end

@implementation Outer

- (instancetype)initWithValue:(NSInteger)i
{
    self = [super init];
    if (self) {
        // ...
    }

    return self;
}

- (NSInteger)val {
    return inner_.val();
}

但我不知道在哪里可以将值传递给 Inner 的构造函数,因为 Objective-C 没有初始化列表。这会生成编译器错误,否则 "No matching constructor for initialization of 'Inner'"

有什么办法可以做到吗?在我的例子中 inner_ 应该与 Outer 具有相同的生命周期,我宁愿不必使它成为指向必须在堆上手动分配并在 [=17] 中释放的对象的指针=].

在Objective-C++中,实例变量必须是default constructible,并且在分配时默认构造。

不幸的是,没有太多official documentation to back this up, and what there is is very old而且已经过时了。