重複の可能性:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…}、どちらが優れていますか?
次の 2 つの条件に違いはありますか。
if (!object) {
// do something
}
と 。. .
if (object == nil) {
// do something
}
重複の可能性:
ObjectiveC: if (obj) {…} AND if (obj != nil) {…}、どちらが優れていますか?
次の 2 つの条件に違いはありますか。
if (!object) {
// do something
}
と 。. .
if (object == nil) {
// do something
}
いいえ、違いはありません。これらの例はどちらもまったく同じです。C 仕様6.5.3.3 単項算術演算子から:
論理否定演算子の結果は、
!オペランドの値が 0 と等しくない場合は 0、オペランドの値が 0 と等しい場合は 1 です。結果の型はintです。式!Eは と同等(0==E)です。
は 0 であるためnil、最後の文が正確に適用されます。
object がタイプidまたは有効な Objective-C オブジェクトである場合、存在する違いは 1 つだけです: 読みやすさです。(つまり、コンパイラの観点からは、どちらも同じです。)
ただし、比較するのnilがあまり良くない例もあるかもしれません。たとえば、なんらかの非論理的な理由で object が だった場合int、次の 2 つのステートメントのみが有効になります。
if (object == 0)
と
if (!object)
それらは再び同等になりますが、int をポインター (つまりnil) と比較することは (整数が明示的な定数 0 である場合を除いて) 違法であり、ほとんどの場合、コンパイラーの警告が発生します (ほとんどの場合、それでも機能しますが、 ...)