哪种形式的Objective-C init方法更受欢迎?

时间:2013-03-27 09:40:46

标签: objective-c idiomatic

到目前为止,我已经看到过三种方式:

1:

- (instancetype)init
{
    self = [super init];
    if (self) {
        // ...
    }
    return self;
}

2:

- (instancetype)init
{
    if (self = [super init]) {
        // ...
    }
    return self;
}

3:

- (instancetype)init
{
    if ((self = [super init]) == nil)
        return nil;
    // ...
    return self;
}

哪种形式更具惯用性Objective-C?

4 个答案:

答案 0 :(得分:5)

  1. 大多数“现代”方法(默认情况下在Xcode 4中使用)。

    - (instancetype)init
    {
        self = [super init];
        if (self) {
            // Initialization code here.
        }
        return self;
    }
    
  2. 旧版Xcode的默认设置。

    - (instancetype)init
    {
        if (self = [super init])
        {
            // Initialization code here.
        }
        return self;
    }
    
  3. 虽然“合法”但很难看到,我不推荐它。

  4. 传统上,在Objective-C 1.0中,init方法返回id,从最近的Objective-C 2.0迭代开始,建议返回instancetype

答案 1 :(得分:2)

一切都是一样的,没关系。我建议使用前两个中的一个。最后一个很少完成。

您可能在Apple上找不到这个级别的任何推荐。他们声明,你应该将super的init的返回值设置为self。你是怎么做到的,取决于你。

Implementing an Initializer

答案 2 :(得分:-1)

我们通常都喜欢这三种方法都是正确的。

- (id) init
{
    self = [super init];

    if (self != nil)
    {
        // your code here
    }

    return self;
}

答案 3 :(得分:-1)

第一或第二是优选的。无需检查它是否为零,因为“if”条件会自动检查。以下是使用init的标准方法。

- (id)init
{
    self = [super init];
    if (self) {
        <#initializations#>
    }
    return self;
}