Was sind die Unterschiede zwischen nil, NULL und [NSNULL nil]?

8

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: -)

    
S.Philip 25.07.2011, 09:59
quelle

3 Antworten

19

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.

%Vor%

nil ist die Objective-C-Version des gleichen Objekts, das auf Obj-C-Objektreferenzen angewendet wird:

%Vor%

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> .

    
Ben Zotto 25.07.2011, 10:05
quelle
5

[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 .

    
user756245 25.07.2011 10:02
quelle
1

Nil ist für Objektzeiger

NULL ist für Nicht-Zeiger

[NSNULL null] ist ein Objekt, das "nil" darstellt, um in Fällen verwendet zu werden, in denen keine Werte zulässig sind (wie von Vince, wie in Sammlungen, z. B. NSArray und NSDictionary, hervorgehoben)

    
Manny 25.07.2011 10:06
quelle