nilObjective-C オブジェクトのリテラル null 値で、抽象型idまたは を介して宣言された任意の Objective-C 型に対応し@interfaceます。例えば:
NSString *someString = nil;
NSURL *someURL = nil;
id someObject = nil;
if (anotherObject == nil) // do something
Niltype に対応する、Objective-C クラスのリテラル null 値ですClass。ほとんどのコードはクラスを参照するために変数を必要としないため、その使用は一般的ではありません。一例は次のとおりです。
Class someClass = Nil;
Class anotherClass = [NSString class];
NULL任意の C ポインターのリテラル NULL 値です。例えば、
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
NSNullnull を表すオブジェクトのクラスです。実際、オブジェクトは 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 にはそのようなものはありません。