2012-04-23 9 views
1

我々はオブジェクトを初期化する必要がある時はいつでも、私たちはすぐにObjective-Cでは、initメソッドを書く方が簡単ですか?

-(id) init { 
    self = [super init]; 
    if (self) { 
     // initialize values here 
    } 
    return self; 
} 

を記述する必要があるようにそれを行うには短い方法があるようですか?多分マクロでさえ?

+3

とても短く&シンプルです。 – Raptor

+0

Xcode自体にコードスニペットを追加してみませんか? [ここをクリック](http://www.tuaw.com/2011/07/05/dev-juice-how-do-i-autocomplete-in-xcode-4/) – Ilanchezhian

+0

coz私はRubyで考えると、 'super'と次の行でinitコードを起動すると、それは...非常に短いです... –

答えて

3

あなたは1行少ないと逃げることができますが、これはもう練習をお勧めしません。

- (id) init { 

    if((self = [super init])){ 
     // initialize ivars 
    } 
    return self; 
} 

ボイラープレートは残念ながら、定型で、初期化子は、物事の各:結果へselfを割り当てます[super init](またはスーパークラスの指定された初期化子)、selfnilでない場合、ivarsを初期化し、self(有効なオブジェクトであるかどうかにかかわらず)を返す必要があります。

タイピングを自分で行うために、Xcodeでコードスニペットを作成できます。

+0

+1のコードスニペットになります。あなたが怠け者になるなら、他の開発者を罰せないでください。 – endy

+0

あなたはそれがもはや推奨されない理由を知っていますか?他の開発者はそれを 'if(self == [super init])'または 'それを編集して誤って読み込んでしまいますそれを修正してください。... = '' == 'に変更してください。 –

+0

@ジェレミー:「推奨される練習」はあまりにも強いフレーズであるかもしれないと思います。おそらく、私は "もはやファッション"と言わなくてはなりませんでした。 http://stackoverflow.com/q/4940366/イニシャライザを書く方法は、いろいろと "異なった方法で"行っているのとは違う、同じように正しい方法のいくつか(私の頭の上から3つを考えることができます)がありますココアの存在の年(そしておそらくそれ以前のNeXT)。 –

2

いいえ、指定したイニシャライザでこれらの操作をすべて実行する必要があるため、簡単なショートカットはありません。

理論的には、マクロルートに行くことができますが、マクロはきれいにならず、コードの読者に直観に反します。

#define BEGIN_INIT self=[super init];if(self){ 
#define END_INIT }return self 

-(id) init { 
    BEGIN_INIT; 
    // initialize values here 
    END_INIT; 
} 

このコードはそれほど短くはなく、他の人にはあまり知られていません。私はそれを強く勧めます。

+1

本当にこれはしないでください。それは、コードのやり方とのやりとりでコードの読みやすさを低下させます。一度、クラスのコードを2行落とすと、 – Chuck

関連する問題