Respuestas:
nil
solo debe usarse en lugar de un id
, lo que los programadores de Java y C ++ pensaríamos como un puntero a un objeto. Úselo NULL
para punteros que no sean objetos.
Mira la declaración de ese método:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
El contexto es un void *
(es decir, un puntero de estilo C), por lo que definitivamente usaría NULL
(que a veces se declara como (void *)0
) en lugar de nil
(que es de tipo id
).
context
in observeValueForKeyPath:ofObject:change:context:
es void *
, ¿no significa eso que los datos pasados como context
podrían ser un puntero de objeto? Creo que ese es un caso común. Es por eso que estoy confundido sobre por qué los documentos siempre usan en NULL
lugar de nil
.
Técnicamente son lo mismo (0), pero nil se usa generalmente para un tipo de objeto Objective-C, mientras que NULL se usa para punteros de estilo c (void *).
Técnicamente son lo mismo y difieren solo en estilo:
nil
qué usar para el id
tipo (y los punteros a los objetos).NULL
es lo que usas void *
.0
.Normalmente uso la variante que coincide con el idioma donde se declara el tipo .
NULL
es el C equivalent
de nil
, un puntero a nada;
donde nil is zero typed as id
,
NULL is zero typed as void*
.
Un punto importante que no puede enviar un mensaje a NULL. Por lo tanto, se prefiere usar nil en el objetivo-C en muchos lugares.
Casi son lo mismo excepto,
nil
se usa en un estilo Objective-C. donde NULL
es para punteros de tipo C y está tipificado como (void *)
.