Quali sono le differenze tra nullo, NULL e [NSNULL nil]?
-
25-10-2019 - |
Domanda
ho ottenuto un errore come questo - * Chiusura di applicazione a causa di eccezione non identificata 'NSInvalidArgumentException', motivo: ** - [NSCFDictionary initWithObjects: forKeys: count:]: tentare di inserire valore nullo a oggetti [0] ( chiave: cercata) '
Poi ho provato il sottostante Codice
if (Obj == (id)[NSNull null]) //Obj is an id
{
NSLog(@" Obj is (id)[NSNull null]");
}
else if (Obj == nil)
{
NSLog(@"Obj is nil");
}
else if (Obj == NULL)
{
NSLog(@"Obj is NULL");
}
else
{
NSLog(@"Obj is something else");
}
searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];
E ho avuto il messaggio NSLog come 'Obj è pari a zero'.
Ma quando ho usato lo stesso codice di cui sopra, quando era Obj NSString e la mia app ottenuto terminato a causa di valore nullo, ho ricevuto il messaggio NSLog come 'Obj è (id) [NSNull null]'.
Quali sono le differenze tra nullo, NULL e [NSNULL nil]?
Ci sono diversi tipi di valori nulli? Se sì, come per controllare comunemente per questi valori nulli
Grazie: -)
Soluzione
NULL
è il valore originale C-style dato a un puntatore che è considerato punto di alcun indirizzo esplicito. E 'generalmente solo usato per significare "unset" o come un sentinella valore .
char * oldstring = NULL;
nil
è la versione Objective-C della stessa cosa applicata ai riferimenti a oggetti Obj-C:
NSString * str = nil;
id foo = nil;
sono entrambi definito essere uguale al valore zero, e anche se potrebbe usarli intercambiabile, ex è visto principalmente all'interno Obj-C per i puntatori tradizionali (come impostare puntatori di contesto void *
NULL ) e nil
viene utilizzato per tutti i riferimenti agli oggetti Obj-C.
La differenza esiste perché anche se la sintassi del Obj-C capita di cavalcare in cima alla C di, il design della lingua è di livello superiore, e le sue ID oggetto non sono concettualmente la stessa semplicemente come "puntatori". Da qui la creazione di una sentinella speciale per loro.
[NSNull null]
è un oggetto che è destinato ad essere impieghi molto taluni casi (come l'inserimento in raccolte) quando un valore 'non valore' è desiderato, ma nil
reale non è permesso, e un oggetto deve essere utilizzato.
Si noti che nil
e NSNull
stringa i molto simile:. Stringifies nil
come (null)
, e NSNull
come <null>
Altri suggerimenti
[NSNull null]
è un wrapper per il valore nil
si desidera inserire nella raccolta, se è quello che vuoi.
NSNull di riferimento di classe.
È inoltre possibile controllare prima se un riferimento a un oggetto è nil
semplicemente con ==
.
Anche nil
è definito come:. #define nil NULL
ed è Objective C equivalente per C NULL
Nil è per i puntatori di oggetto
NULL è per i non puntatori
[NSNULL null] Uno scopo di rappresentare "zero" da utilizzare nei casi valori nulli non sono ammessi (come fuori punte da Vince, come in collezioni esempio NSArray e NSDictionary)