Ich habe einen Fehler wie folgt erhalten - * Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: ** - [NSCFDictionary initWithObjects: forKeys: count:]: Versuch, nil-Wert an Objekten einzufügen [0] ( Schlüssel: gesucht) '
Dann habe ich den folgenden Code ausprobiert
%Vor%Und ich habe die NSLog-Nachricht als "Obj is nil".
Aber wenn ich denselben obigen Code benutzte, als Obj NSString war und meine App wegen Nil-Wert beendet wurde, bekam ich die NSLog-Nachricht als 'Obj is (id) [NSNull null]'.
Was sind die Unterschiede zwischen nil, NULL und [NSNULL nil]?
Gibt es verschiedene Arten von Nullwerten? Wenn ja, wie wird häufig nach diesen Nullwerten gesucht ?
Danke: -)
NULL
ist der ursprüngliche C-artige Wert, der einem Zeiger zugewiesen wird, von dem angenommen wird, dass er auf keine explizite Adresse zeigt. Es wird im Allgemeinen nur verwendet, um "Unset" oder als Sentinel-Wert zu verstehen.
nil
ist die Objective-C-Version des gleichen Objekts, das auf Obj-C-Objektreferenzen angewendet wird:
Sie sind beide so definiert, dass sie gleich dem Wert Null sind, und obwohl sie austauschbar verwenden könnte, wird ersteres hauptsächlich in Obj-C für traditionelle Zeiger verwendet (wie das Setzen von void *
Kontextzeigern) bis NULL) und nil
wird für alle Obj-C Objektreferenzen verwendet.
Der Unterschied besteht darin, dass, obwohl die Obj-C-Syntax auf Cs liegt, das Design der Sprache höher ist und die Objekt-IDs sind nicht konzeptionell gleich wie nur" Zeiger ". Daher die Schaffung eines besonderen Wächters für sie.
[NSNull null]
ist ein Objekt beabsichtigt , in sehr bestimmten Fällen verwendet zu werden (z. B. Einfügen in Sammlungen), wenn ein "nicht wert" -Wert gewünscht ist, aber das tatsächliche nil
nicht erlaubt ist und ein Objekt verwendet werden muss.
Beachten Sie, dass nil
und NSNull
sehr ähnlich stringify: nil
stringiert als (null)
und NSNull
als <null>
.
[NSNull null]
ist ein Wrapper für den nil
-Wert, den Sie in die Sammlung einfügen möchten, wenn Sie möchten.
NSNull Klassenreferenz.
Sie können auch vorher prüfen, ob eine Objektreferenz nil
einfach mit ==
ist.
Auch nil
ist definiert als: #define nil NULL
und ist Objective C äquivalent für C NULL
.
Tags und Links objective-c iphone null invalidargumentexception