nil
ist der Literal-Nullwert für Objective-C-Objekte, der dem abstrakten Typ id
oder einem über deklarierten Objective-C-Typ entspricht @interface
. Zum Beispiel:
NSString *someString = nil;
NSURL *someURL = nil;
id someObject = nil;
if (anotherObject == nil)
Nil
ist der Literal-Nullwert für Objective-C-Klassen, der dem Typ entspricht Class
. Da der meiste Code keine Variablen zum Referenzieren von Klassen benötigt, ist seine Verwendung nicht üblich. Ein Beispiel ist:
Class someClass = Nil;
Class anotherClass = [NSString class];
NULL
ist der Literal-Nullwert für beliebige C-Zeiger. Zum Beispiel,
int *pointerToInt = NULL;
char *pointerToChar = NULL;
struct TreeNode *rootNode = NULL;
NSNull
ist eine Klasse für Objekte, die null darstellen. Tatsächlich gibt es nur ein Objekt, nämlich das von +[NSNull null]
. Es unterscheidet sich von nil
da nil
ist eine wörtliche Null - Wert, dh es ist kein Objekt. Die einzelne Instanz von NSNull
ist andererseits ein geeignetes Objekt.
NSNull
wird häufig in Foundation-Sammlungen verwendet, da sie keine nil
Werte speichern können. Im Falle von Wörterbüchern, -objectForKey:
kehrt nil
um anzuzeigen , dass eine bestimmte Taste kein Objekt im Wörterbuch , das entspricht, das heißt, hat sich der Schlüssel nicht in das Wörterbuch aufgenommen. Wenn Sie deutlich machen möchten, dass Sie einen bestimmten Schlüssel haben, dieser aber noch keinen Wert hat, können Sie ihn verwenden [NSNull null]
.
Im Folgenden wird beispielsweise eine Ausnahme ausgelöst, da Wörterbücher keine nil
Werte speichern können:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:nil forKey:@"someKey"];
Andererseits ist der folgende Code gültig, da er [NSNull null]
kein nil
Objekt ist:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNull null] forKey:@"someKey"];
Es ist erwähnenswert, dass Foundation-Sammlungen Initialisierer haben, die nil
als Markierung für das Ende einer Liste von Objekten dienen, ohne die Anzahl der Elemente in der Liste angeben zu müssen. Dies kann nur passieren, weil nil
es nicht in einer Foundation-Sammlung gespeichert werden kann. Zum Beispiel,
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", nil];
Was NIL
oder NSNil
gibt es keine solche Dinge in Objective-C oder Apple - Stiftung.