1

オブジェクトを初期化する必要があるときはいつでも、すぐに書き込む必要があるようです

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

それを行うより短い方法はありますか?たぶんマクロでも?

4

2 に答える 2

3

1 行少なくすることもできますが、これは推奨される方法ではなくなりました。

- (id) init {

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

残念ながらボイラープレートはボイラープレートであり、イニシャライザーが行うことのそれぞれ: (またはスーパークラスの指定されたイニシャライザー) のself結果への代入、 is notのチェック、ivar の初期化、および戻り(または有効なオブジェクトかどうか) はすべて必要です。[super init]selfnilselfnil

入力の手間を省くために、Xcode でコード スニペットを作成できます。

于 2012-04-23T04:14:50.577 に答える
2

いいえ、指定された初期化子でこれらすべての操作を実行する必要があるため、簡単な近道はありません。

理論的には、マクロ ルートに進むことができますが、マクロは見栄えがよくなく、コードの読者にとって直感に反するものになります。

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

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

このコードはそれほど短くはなく、他の人にはあまりなじみがありません。もう一度強くお勧めします。

于 2012-04-23T04:12:00.630 に答える