2

重複の可能性:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…}、どちらが優れていますか?

次の 2 つの条件に違いはありますか。

if (!object) {
 // do something
}

と 。. .

if (object == nil) {
 // do something
}
4

2 に答える 2

9

いいえ、違いはありません。これらの例はどちらもまったく同じです。C 仕様6.5.3.3 単項算術演算子から:

論理否定演算子の結果は、!オペランドの値が 0 と等しくない場合は 0、オペランドの値が 0 と等しい場合は 1 です。結果の型はintです。式!Eは と同等(0==E)です。

は 0 であるためnil、最後の文が正確に適用されます。

于 2012-08-12T21:34:44.293 に答える
1

object がタイプidまたは有効な Objective-C オブジェクトである場合、存在する違いは 1 つだけです: 読みやすさです。(つまり、コンパイラの観点からは、どちらも同じです。)

ただし、比較するのnilがあまり良くない例もあるかもしれません。たとえば、なんらかの非論理的な理由で object が だった場合int、次の 2 つのステートメントのみが有効になります。

if (object == 0)

if (!object)

それらは再び同等になりますが、int をポインター (つまりnil) と比較することは (整数が明示的な定数 0 である場合を除いて) 違法であり、ほとんどの場合、コンパイラーの警告が発生します (ほとんどの場合、それでも機能しますが、 ...)

于 2012-08-12T21:34:37.530 に答える