重複の可能性:
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 である場合を除いて) 違法であり、ほとんどの場合、コンパイラーの警告が発生します (ほとんどの場合、それでも機能しますが、 ...)