4

So far I've seen it done three ways:

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;
}

Which form is more idiomatic Objective-C?

4

4 回答 4

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. 虽然“合法”但很少见,我不会推荐它。

传统上,在 Objective-C 1.0 中,init 方法返回id,在 Objective-C 2.0 的更新版本中,建议改为返回instancetype

于 2013-03-27T14:23:34.060 回答
2

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

您可能不会从 Apple 那里找到有关此级别的任何建议。他们声明,您应该将超级的 init 的返回值设置为 self。你如何做到这一点取决于你。

实现初始化器

于 2013-03-27T09:41:47.273 回答
-1

这三种方法都是正确的,我们通常会这样做。

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

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

    return self;
}
于 2013-03-27T09:45:01.157 回答
-1

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

- (id)init
{
    self = [super init];
    if (self) {
        <#initializations#>
    }
    return self;
}
于 2013-03-27T09:51:17.507 回答