2011-07-25 16 views
8

私はこのようなエラーを受けました - *キャッチされていない例外 'NSInvalidArgumentException'のためアプリを終了します、理由:** - [NSCFDictionary initWithObjects:forKeys:count:]:オブジェクト[0](キー: 「)nil、NULL、[NSNULL nil]の違いは何ですか?

は、その後、私は以下のコード

if (Obj == (id)[NSNull null]) //Obj is an id 
{ 
    NSLog(@" Obj is (id)[NSNull null]");  
} 
else if (Obj == nil) 
{ 
    NSLog(@"Obj is nil"); 
} 
else if (Obj == NULL) 
{ 
    NSLog(@"Obj is NULL"); 
} 
else 
{ 
    NSLog(@"Obj is something else"); 
} 

searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"]; 

を試してみましたが、私としては、のNSLogメッセージが表示されました 'objがnilです'。

しかし、ObjがNSStringであり、アプリケーションがnil値で終了したときに同じコードを使用したとき、NSLogメッセージは 'Obj is(id)[NSNull null]'という名前になりました。

nil、NULL、[NSNULL nil]の違いは何ですか?

Null値にはいくつかの種類がありますか?はいの場合、これらのヌル値を一般にチェックする方法

+0

[iphone + NilとNullの違い]の可能な複製(http://stackoverflow.com/questions/5908936/iphonedifference-between-nil-nil-and- null) –

答えて

19

NULLは、明示的なアドレスを指していないとみなされるポインタに与えられた元のCスタイルの値です。一般的には、「未設定」またはsentinel valueという意味で使用されています。

char * oldstring = NULL; 

nilのObj-Cのオブジェクト参照に適用される同じもののObjective-Cのバージョンである:

NSString * str = nil; 
id foo = nil; 

これらは両方値ゼロに等しくなるように定義され、そしてあなたがされていますはそれらを同じ意味で使うことができます。前者は、主にObj-C内で伝統的なポインタ(例えば、void *コンテキストポインタがNULLに設定されています)に見られ、nilがすべてのObj-Cオブジェクト参照に使用されます。

Obj-Cの構文はCの上に乗っていますが、言語の設計はより高いレベルであり、そのオブジェクトIDはaren't conceptually the sameが単なるポインタであるため、違いがあります。したがって、彼らのための特別な監視隊の作成。

[NSNull null]「は、非値」の値が所望される(コレクションに挿入するような)非常に特定の場合に使用されるオブジェクトthat is intendedであるが、実際のnilが許可されていない、およびオブジェクトを使用しなければなりません。nil(null)としてstringifies、及び<null>としてNSNullを:nilNSNullは非常に同様に文字列化することを

注。

+0

ありがとう..... ..... –

5

[NSNull null] :-)

おかげで、あなたがそれはあなたが望むものである場合は、コレクション内に挿入するnil値のラッパーです。

NSNullクラス参照。

また、オブジェクト参照がnilの場合は、単に==であるかどうかを確認することもできます。

また、nilは、#define nil NULLと定義され、C NULLと同等のObjective Cです。

+0

クイックレスポンス用のThanx:大丈夫、「NSNullクラスリファレンス」を確認しました。 nilとNULLは異なるのですか? –

+0

@ S.Philip - いいえ 'nil'は、その定義に従って' NULL'を言う別の方法です –

+0

ありがとう..... ..... –

1

nilの

NULLが非ポインタ

[nsnullをヌル]のためのものであるオブジェクト・ポインタのためのものであることが指摘したように(許可されていない「ゼロ」値をnilをケースに使用されることを表現することを目的としますVince、コレクションのようなNSArrayとNSDictionary)

+0

ありがとう..... –