0

CocoaDesignPatternsの本を読んでいます。本では、変数を割り当てた後、以下のようになっているかどうかがselfチェックされますselfnil

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

私はまた、自己をチェックする別の方法を見てきました

if( self ){ 
// code 
}

これらの手法のいずれかを使用することにメリットはありますか、それとも単に好みの問題ですか?

ありがとう。

4

1 に答える 1

1

彼らは同じです

ifブロックの内容

if (expression) {
    // contents...
}

expression評価がゼロ以外の値になった場合に備えて実行されます。

これは、次のifブロックのコードが

//the first if block
if (self) {
    // contents....
}

selfがゼロ以外の場合は常に実行されます。

一方、この ifブロックの内容

// the second if block
if (self != nil) {
    // contents...
}

self != nilがゼロ以外の場合は常に実行されます。

演算子は、2つの比較対象(この場合はと)が同一である場合に戻り!=、2つの比較対象が同一でない場合に戻ります。したがって、2番目のブロックのコードは、と同一でない場合は常に実行されます。0selfnil1ifselfnil

しかし、 dはにnilあります。したがって、2番目のブロックのコードは、と同一でない場合は常に実行されます。これは、最初のブロックのコードが実行されるのとまったく同じ時間です。ゼロ以外の場合はいつでも。#define0<objc/objc.h>ifself0ifself

結果

2つのアプローチではまったく同じコードが実行されるため、どちらか一方を優先する技術的な理由はありません。この場合の最も重要な文体上の考慮事項は、初期化子の一貫性です。好みのスタイルを決めて、どこでも使用できます。

于 2012-10-23T06:05:10.827 に答える