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

Kal*_*lle 9 initialization objective-c

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

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

- (id)initWithA:B:C:D:
Run Code Online (Sandbox Code Playgroud)

- (id)initWithA:B:C:foo:D:
Run Code Online (Sandbox Code Playgroud)

现在我只是简单地将第一个实现粘贴到foo中:1,但理想情况下,第一个调用是第二个,即

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

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

Dav*_*ong 16

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

这就是我们称之为" 指定初始化器 "的原因.这是初始化方法,所有其他初始值设定项都被重定向(通常).

  • @Kalle理论上所有答案都在文档中.然而,它仍然(通常)值得提出问题,以便其他人可以在将来更容易地找到信息.:) (5认同)