En observeValueForKeyPath:ofObject:change:context:
: ¿por qué usan los documentos en NULL
lugar de nil
cuando no se especifica un puntero de contexto?
objective-c
cocoa
null
erikprice
fuente
fuente
Respuestas:
nil
solo debe usarse en lugar de unid
, lo que los programadores de Java y C ++ pensaríamos como un puntero a un objeto. ÚseloNULL
para punteros que no sean objetos.Mira la declaración de ese método:
El contexto es un
void *
(es decir, un puntero de estilo C), por lo que definitivamente usaríaNULL
(que a veces se declara como(void *)0
) en lugar denil
(que es de tipoid
).fuente
context
inobserveValueForKeyPath:ofObject:change:context:
esvoid *
, ¿no significa eso que los datos pasados comocontext
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 enNULL
lugar denil
.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 *).
fuente
NULL
se define de manera diferente quenil
.nil
se define como(id)0
.NULL
no lo esTécnicamente son lo mismo y difieren solo en estilo:
nil
qué usar para elid
tipo (y los punteros a los objetos).NULL
es lo que usasvoid *
.0
.Normalmente uso la variante que coincide con el idioma donde se declara el tipo .
fuente
NULL
es elC equivalent
denil
, 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.
fuente
Casi son lo mismo excepto,
nil
se usa en un estilo Objective-C. dondeNULL
es para punteros de tipo C y está tipificado como(void *)
.fuente