nil
Objective-C オブジェクトのリテラル null 値で、抽象型id
または を介して宣言された任意の Objective-C 型に対応し@interface
ます。例えば:
NSString *someString = nil;
NSURL *someURL = nil;
id someObject = nil;
if (anotherObject == nil) // do something
Nil
type に対応する、Objective-C クラスのリテラル null 値ですClass
。ほとんどのコードはクラスを参照するために変数を必要としないため、その使用は一般的ではありません。一例は次のとおりです。
Class someClass = Nil;
Class anotherClass = [NSString class];
NULL
任意の C ポインターのリテラル NULL 値です。例えば、
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
NSNull
null を表すオブジェクトのクラスです。実際、オブジェクトは 1 つだけです。つまり、 によって返されるオブジェクト+[NSNull null]
です。これは、リテラルの null 値、つまりオブジェクトではないnil
ためとは異なります。nil
一方、の単一インスタンスはNSNull
適切なオブジェクトです。
NSNull
値を格納できないため、Foundation コレクションでよく使用されnil
ます。ディクショナリの場合、指定されたキーに対応するオブジェクトがディクショナリにないこと、つまり、キーがディクショナリに追加されていないことを示すために-objectForKey:
返されます。nil
特定のキーを持っているが値がまだないことを明示したい場合は、 を使用できます[NSNull null]
。
たとえば、辞書はnil
値を格納できないため、次の例では例外がスローされます。
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:nil forKey:@"someKey"];
一方、次のコードは が[NSNull null]
非nil
オブジェクトであるため有効です。
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNull null] forKey:@"someKey"];
Foundation コレクションにnil
は、リスト内の要素の数を指定する必要なく、オブジェクトのリストの終わりのマーカーとして使用する初期化子があることに注意してください。nil
これは、Foundation コレクションに格納できないためにのみ発生します。例えば、
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
NIL
またはについてNSNil
は、Objective-C や Apple Foundation にはそのようなものはありません。