object-c ですべての非 nil オブジェクトが true と評価されるのは本当ですか? つまり、これは次のとおりです。
if (thing) NSLog(@"yes");
これと同じ:
if (thing != nil) NSLog(@"yes");
経験的には本当のようですthing = @0
が、実際にこれを述べているドキュメントは見つかりません。
object-c ですべての非 nil オブジェクトが true と評価されるのは本当ですか? つまり、これは次のとおりです。
if (thing) NSLog(@"yes");
これと同じ:
if (thing != nil) NSLog(@"yes");
経験的には本当のようですthing = @0
が、実際にこれを述べているドキュメントは見つかりません。
それは本当です。
@0
NSNumber
アドレス 0 (nil) ではなく、値 0のオブジェクトになります。
nil
はい、古き良き C と同じように、そうでない(または)でないすべてのポインターはNULL
trueNSNull
と評価されます。
はい、Objective-C は C 上のレイヤーであるため、同じルールが適用されます。
C では、すべての非 NULL 変数/ポインターが true と評価されるため、Objective-C でも同様です。
への非 NULL ポインターも@0
表すNSNumber
ため、正しく true と評価されます。
if は、0 (false) またはその他の数値 (true) をチェックします。あなたの「もの」は基本的にアドレス(したがって有効な数値)であるため、「true」と評価されます。
((@0) && ([NSNULL null]) && (YES) && (thing) && (int a = 2))
TRUE
またはにYES
それぞれ評価されます。thing==nil