Risposte:
nil
dovrebbe essere usato solo al posto di un id
, quello che noi programmatori Java e C ++ considereremmo come un puntatore a un oggetto. Utilizzare NULL
per puntatori non oggetto.
Guarda la dichiarazione di quel metodo:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Il contesto è un void *
(cioè un puntatore in stile C), quindi useresti sicuramente NULL
(che a volte viene dichiarato come (void *)0
) anziché nil
(che è di tipo id
).
context
in observeValueForKeyPath:ofObject:change:context:
è void *
, ciò non significa che i dati passati come context
potrebbero essere un puntatore a oggetto? Penso che sia un caso comune. Ecco perché sono confuso sul perché i documenti usano sempre NULL
anziché nil
.
Tecnicamente sono la stessa cosa (0), ma in genere zero viene utilizzato per un tipo di oggetto Objective-C, mentre NULL viene utilizzato per i puntatori di tipo c (void *).
Tecnicamente sono la stessa cosa e differiscono solo per stile:
nil
che cosa usare per il id
tipo (e i puntatori agli oggetti).NULL
è quello che usi void *
.0
.In genere utilizzo la variante che corrisponde alla lingua in cui viene dichiarato il tipo .
NULL
è il C equivalent
di nil
, un puntatore a nulla;
dove nil is zero typed as id
,
NULL is zero typed as void*
.
Un punto importante che non puoi inviare un messaggio a NULL. Quindi si preferisce usare lo zero in obiettivo-C in molti punti.
Sono quasi la stessa cosa tranne,
nil
viene utilizzato in uno stile Objective-C. dove NULL
è per i puntatori di tipo C ed è tipizzato (void *)
.