ObjC:在init中我可以做self = [self initWithMyGenericMethod]吗?

时间:2013-02-07 03:42:39

标签: ios objective-c

在我的课堂上,我有一个通用的初始化器:

- (id)initWithSettings:(MySettings *)settings
{
    self = [super init];
    if (self)
    {
     /// ...
    }
    return self;
}

它有另一个具有固定设置的初始化

- (id)initWithSettingsForCaseA
{
    return [self initWithSettings:[MySettings genericSettings]];
}

我可以这样做吗?

1 个答案:

答案 0 :(得分:2)

当然可以!

这实际上是一种很好的做法。

initWithSettings:被称为“指定的初始化器”。没有以编程方式定义指定的初始化程序。这更像是一种设计模式/最佳实践。

以UIViewController的指定初始化程序为例,initWithNibName:bundle:..你仍然可以调用普通的'init',只要你的nib与你的视图控制器子类名相同,一切都会正常工作。 UIViewController只是调用它的指定初始化程序,并为两个参数传递nil。

你基本上都在做同样的事情!