objective c - NULL vs nil en Objective-C
cocoa (5)
Casi son lo mismo, excepto
nil
se usa en un estilo Objective-C. donde NULL
es para punteros tipo C y está tipificado a (void *)
.
En observeValueForKeyPath:ofObject:change:context:
¿por qué los documentos usan NULL
lugar de nil
cuando no se especifica un puntero de contexto?
Son técnicamente lo mismo (0), pero nil se usa generalmente para un tipo de objeto Objective-C, mientras que NULL se usa para punteros estilo c (void *).
Son técnicamente lo mismo y difieren solo en estilo:
- El estilo Objective-C dice que
nil
es lo que se debe usar para el tipo deid
(y punteros a los objetos). - El estilo C dice que
NULL
es lo que usas paravoid *
. - El estilo de C ++ típicamente dice que solo debes usar
0
.
Normalmente utilizo la variante que coincide con el idioma en el que 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.
nil
solo debería usarse en lugar de una id
, lo que los programadores de Java y C ++ pensaríamos como un puntero a un objeto. Use NULL
para punteros que no sean objetos.
Mire 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
).