if(!val)
であるかどうかをテストしval
ますnull
。それはあなたが使いたいものであり、明白で単純なものでなければなりません。if(val == nil)
同等です。
[val isEqualToString:@"null"]
名前が示すように、文字列val
「null」と等しいかどうかをテストします。これにより、確実にそうではなくなります。null
[val isKindOfClass:[NSNull class]]
今のところあなたとは関係がないので、心配しないでください。
あなたが説明を求めたので編集してくださいNSNull
:
場合によっては、それ自体ではなく、の概念を格納できる必要があります。nil
nil
nil
内部に配列が必要だとします。配列をのように見せたいと思います[obj1, obj2, nil, obj3]
。
のような配列を宣言することはできません。[NSArray arrayWithObjects:obj1, obj2, nil, obj3, nil]
引数を通過するときに、配列nil
が停止することを確認したからです。これにより、配列が作成され[obj1, obj2]
ますが、これは目的の配列ではありません。
では、このような状況であなたは何をしますか?配列を作成します[NSArray arrayWithObjects:obj1, obj2, [NSNull null], obj3]
。これで配列にオブジェクトができましたが、この特定のオブジェクトは、システム内の全員が「null」と呼ぶことに同意したものです。実際にはnullではありません。
ここで実際に起こっているのは[NSNull null]
シングルトンです。を呼び出すと[NSNull null]
、の静的インスタンスが返されますNSNull
。[NSNull null]
もう一度呼び出すと、メソッドを呼び出す場所に関係なく、同じオブジェクトが返されます。NSNull
アプリの全世界にインスタンスが1つしかないため、同じアドレスにnullの意味を持たないオブジェクトが存在することはないため、nullと同等です。
ですから、私が上で言ったように、それはあなたにはまったく関係がありません。NSNull
正当なObjective-Cオブジェクトが必要であるが、それを「null」にしたい場合にのみ必要です。通常NSNull
、単純な文字列などよりも安全に使用@"(null)"
できます。これは、その文字列の値を上書きしたり、文字列の比較を台無しにしたりする可能性があるためです。将来的には、文字列@"(null)"
を同じデータ構造に格納する必要がある場合があります。 'nullオブジェクトなどを保存しています。