In observeValueForKeyPath:ofObject:change:context:
- por que os documentos usam em NULL
vez de nil
quando não especificam um ponteiro de contexto?
objective-c
cocoa
null
erikprice
fonte
fonte
Respostas:
nil
deve ser usado apenas no lugar de umid
, o que nós, programadores Java e C ++, consideraríamos como um ponteiro para um objeto. UseNULL
para ponteiros que não são objetos.Veja a declaração desse método:
O contexto é um
void *
(ou seja, um ponteiro no estilo C), então você definitivamente usariaNULL
(que às vezes é declarado como(void *)0
) e nãonil
(que é do tipoid
).fonte
context
noobserveValueForKeyPath:ofObject:change:context:
évoid *
não, isso significa que os dados passados como ocontext
poderia ser um ponteiro de objeto? Eu acho que esse é um caso comum. É por isso que estou confuso sobre o motivo pelo qual os documentos sempre usam emNULL
vez denil
.Eles são tecnicamente a mesma coisa (0), mas nil geralmente é usado para um tipo de objeto Objective-C, enquanto NULL é usado para ponteiros no estilo c (void *).
fonte
NULL
é definido de forma diferente denil
.nil
define-se como(id)0
.NULL
não é.Eles são tecnicamente a mesma coisa e diferem apenas em estilo:
nil
é o que usar para oid
tipo (e ponteiros para objetos).NULL
é para isso que você usavoid *
.0
.Normalmente, uso a variante que corresponde ao idioma em que o tipo é declarado .
fonte
NULL
é oC equivalent
denil
, um ponteiro para o nada;onde
nil is zero typed as id
,NULL is zero typed as void*
.Um ponto importante que você não pode enviar uma mensagem para NULL. Portanto, é preferível usar zero na objetiva-C em muitos locais.
fonte
Eles quase são a mesma coisa, exceto,
nil
é usado no estilo Objective-C. ondeNULL
é para ponteiros do tipo C e é tipificado para(void *)
.fonte