4

これまでのところ、私はそれが3つの方法で行われるのを見てきました。

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

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

すべて同じです、それは問題ではありません。ただし、最初の2つのうちの1つを使用することをお勧めします。最後のものはめったに行われません。

このレベルでのAppleからの推奨事項はおそらく見つかりません。彼らは、スーパーのinitの戻り値を自分自身に設定する必要があると述べています。それをどのように行うかはあなた次第です。

イニシャライザーの実装

于 2013-03-27T09:41:47.273 に答える
-1

3つの方法はすべて正しいので、通常はそのようにします。

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

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

    return self;
}
于 2013-03-27T09:45:01.157 に答える
-1

1番目または2番目が優先されます。「if」条件で自動的にチェックされるため、nilかどうかをチェックする必要はありません。以下は、initを使用する標準的な方法です。

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