2

object-c ですべての非 nil オブジェクトが true と評価されるのは本当ですか? つまり、これは次のとおりです。

if (thing) NSLog(@"yes");

これと同じ:

if (thing != nil) NSLog(@"yes");

経験的には本当のようですthing = @0が、実際にこれを述べているドキュメントは見つかりません。

4

5 に答える 5

4

それは本当です。

@0NSNumberアドレス 0 (nil) ではなく、値 0のオブジェクトになります。

于 2012-12-12T21:10:07.710 に答える
3

nilはい、古き良き C と同じように、そうでない(または)でないすべてのポインターはNULLtrueNSNullと評価されます。

于 2012-12-12T21:09:51.077 に答える
3

はい、Objective-C は C 上のレイヤーであるため、同じルールが適用されます。

C では、すべての非 NULL 変数/ポインターが true と評価されるため、Objective-C でも同様です。

への非 NULL ポインターも@0表すNSNumberため、正しく true と評価されます。

于 2012-12-12T21:10:11.690 に答える
3

if は、0 (false) またはその他の数値 (true) をチェックします。あなたの「もの」は基本的にアドレス(したがって有効な数値)であるため、「true」と評価されます。

于 2012-12-12T21:10:17.430 に答える
2
((@0) && ([NSNULL null]) && (YES) && (thing) && (int a = 2))

TRUEまたはにYESそれぞれ評価されます。thing==nil

于 2012-12-12T21:40:19.530 に答える