2011-11-14 19 views
8

可能重複ゼロ:
What's the difference between [NSNull null] and nil?
[nsnullをヌル]についてのいくつかの混乱、

What are the differences between nil, NULL and [NSNULL nil]?
id dicValue = [aDictionary objetForKey:@"aKey"]; 

if(dicValue != nil) 
{ 
    blablala... 
} 

又は

2.

if(dicValue != [NSNull null]) 
{ 
    blablala... 
} 

私は最初の1、または第二のいずれかを選択する必要がありますか?

か、それは次のように来る:再び

3.

if ([aDictionary objetForKey:@"aKey"] != nil) 

または

4.

if ([aDictionary objetForKey:@"aKey"] != [NSNull null]) 

と何?

1.2.3.4。これは正しいとお勧めですか?

答えて

18

Apple Documentationから直接。
NSNullクラスは、nilが値として(通常は配列や辞書などのコレクションオブジェクト内で)禁止されている状況で、null値を表すために使用するシングルトンオブジェクトを定義します。

NSNull *nullValue = [NSNull null]; 
NSArray *arrayWithNull = [NSArray arrayWithObject:nullValue]; 
NSLog(@"arrayWithNull: %@", arrayWithNull); 
// output: "arrayWithNull: (<null>)" 

NSNullインスタンスが意味的にNOまたは偽であることを理解することは重要です。これらは両方とも論理値を表します。 NSNullインスタンスは値が存在しないことを表します。 NSNullインスタンスは意味的にnilと等価ですが、nilと等しくないことを理解することも重要です。 nullのオブジェクト値をテストするには、オブジェクトを直接比較する必要があります。

id aValue = [arrayWithNull objectAtIndex:0]; 
if (aValue == nil) { 
    NSLog(@"equals nil"); 
} else if (aValue == [NSNull null]) { 
    NSLog(@"equals NSNull instance"); 
    if ([aValue isEqual:nil]) { 
     NSLog(@"isEqual:nil"); 
    } 
} 
// output: "equals NSNull instance" 

これは現在明確ですか?

+0

一種の、ありがとう! – Patrick

+0

これは本当にありがとう! SO全体で比較演算子を探していた – Jake

0

この場合、最初のものを使用してください。か、多少の変動:あなたは辞書のキー、配列エントリ、または類似として使用するために、たとえば、有効なオブジェクトを必要とするとき

if (dicValue) { 
    // blablabla... 
} 

NSNullが使用するためのものです。

nilは、(id)NULLに等しい。それは一般的に "無価値"を意味すると解釈されます。一方、空の値を保持するオブジェクトである。 「値なし」を意味すると解釈されます。

ほとんどのメソッドはNSNullという値を返しますが、通常は自分で導入する場合にのみ発生します。

nilは配列に挿入できないため、ほとんどの場合存在します。それを必要とする配列の空のマーカーとして機能します。


関連するノートでは、式の "!= nil"部分が冗長です。オブジェクトへの任意の有効なポインタは、ブール式で真と評価され、nilは偽と評価されます。

+0

3q、私はそれが冗長であることを知っていますが、私はまだ "!= nil" part.itを追加してコードを読みやすくしています: – Patrick

1

第1は、第二のキーの値がNSNull

+0

これは明らかです。 – Patrick

3

私の理解では、nsnullをがNULL値を表すオブジェクトであるとnilでちょうど空ポインタであるということであることを意味し、そのようなキーがないことを意味します。

NSArrayにNSNullオブジェクトを入力すると、null値が返されますが、nilsで入力することはできません。

あなたは

[myNsMutableArray addObject:[NSNull null]]; 

を行うことができますが、これはクラッシュしました:同様に

[myNsMutableArray addObject:nil]; 

[[NSMutableArray alloc] initWithObjects:@"1", nil, @"2", nil]; 
[[NSMutableArray alloc] initWithObjects:@"1", [NSNull null], @"2", nil]; 

最初の配列を、印刷されただろう出力 "1" 秒1 "1、null、2"を出力します。

NSNullを使用すると、配列内の空白を表すことができます。

辞書にnilを挿入することはできません。だからそれは鍵が存在しないことを意味する。 NSNullをチェックすると、キーは存在するが空(NSNull)の値を保持していることを意味します。

+0

3q、これは大いに役立ちます! – Patrick

+0

私はそれがうれしいです。答えを受け入れる:) – Odrakir

関連する問題