8

このようなエラーが発生しました-

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了して います。

次に、以下のコードを試しました

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"];

そして、「Obj is nil」という NSLog メッセージを受け取りました。

しかし、Obj が NSString で、nil 値が原因でアプリが終了したときに上記の同じコードを使用すると、「Obj is (id)[NSNull null]」という NSLog メッセージが表示されました。

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

さまざまな種類の Null 値がありますか? はいの場合、これらの null 値を一般的に確認する方法は?

ありがとう :-)

4

3 に答える 3

19

NULL明示的なアドレスを指していないと見なされるポインターに与えられる元の C スタイルの値です。通常、「未設定」を意味するため、またはセンチネル値として使用されます。

char * oldstring = NULL;

nilObj-C オブジェクト参照に適用されるのと同じことの Objective-C バージョンです。

NSString * str = nil;
id foo = nil;

どちらも値ゼロに等しいと定義されており、同じ意味で使用できますが、前者は主に Obj-C 内で従来のポインター (void *コンテキスト ポインターを NULL に設定するなど)として見nilられ、すべての Obj-C オブジェクト参照に使用されます。 .

Obj-C の構文はたまたま C の上に乗っていますが、言語の設計は高レベルであり、そのオブジェクト IDは概念的に単なる「ポインター」と同じではないため、違いが存在します。したがって、彼らのための特別な歩哨の作成。

[NSNull null]「非値」の値が必要な非常に特定のケース (コレクションへの挿入など) での使用を意図したオブジェクトですが、実際の値はnil許可されておらず、オブジェクトを使用する必要があります。

nilNSNullstringify は非常によく似ていることに注意しnil(null)ください。NSNull<null>

于 2011-07-25T10:05:14.847 に答える
5

[NSNull null]nil必要に応じて、コレクションに挿入する値のラッパーです。

NSNullクラス参照。

オブジェクト参照がnil単に==.

またnil、次のように定義されています : #define nil NULLC と同等の Objective CNULLです。

于 2011-07-25T10:02:16.760 に答える
1

nil はオブジェクトポインタ用です

NULL は非ポインター用です

[NSNULL null] は、nil 値が許可されていない場合に使用される「nil」を表すオブジェクトです (Vince が指摘したように、NSArray や NSDictionary などのコレクションのように)。

于 2011-07-25T10:06:29.870 に答える