在init方法中调用自身的init方法是否可以?

时间:2010-08-16 16:32:27

标签: objective-c initialization

最近我意识到我需要在init方法中添加一个参数,用于我所拥有的辅助类。辅助类处理警报视图,因此它在init中已经有一堆参数,这些参数被查看,调整,然后发送到警报视图。

由于我在不同的地方使用这种方法,我不想冒险崩溃(错过其中一个地方并让一个'无法识别的选择器'在客户手中)所以我决定添加第二个init方法。

- (id)initWithA:B:C:D:

- (id)initWithA:B:C:foo:D:

现在我只是将第一个实现的粘贴复制到foo:one,但理想情况下,第一个调用是第二个,即。

- (id)initWithA:a B:b C:c D:d
{
    return [self initWithA:a B:b C:c foo:nil D:d];
}

但我不确定这是否可以接受。代码似乎工作正常。

1 个答案:

答案 0 :(得分:16)

是的,这是完全可以接受的,实际上很常见。

这就是我们称之为“Designated Initializer”的原因。这是初始化方法,所有其他初始值设定项都被重定向(通常)。