Respostas:
nil
deve ser usado apenas no lugar de um id
, o que nós, programadores Java e C ++, consideraríamos como um ponteiro para um objeto. Use NULL
para ponteiros que não são objetos.
Veja a declaração desse método:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
O contexto é um void *
(ou seja, um ponteiro no estilo C), então você definitivamente usaria NULL
(que às vezes é declarado como (void *)0
) e não nil
(que é do tipo id
).
context
no observeValueForKeyPath:ofObject:change:context:
é void *
não, isso significa que os dados passados como o context
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 em NULL
vez de nil
.
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 *).
Eles são tecnicamente a mesma coisa e diferem apenas em estilo:
nil
é o que usar para o id
tipo (e ponteiros para objetos).NULL
é para isso que você usa void *
.0
.Normalmente, uso a variante que corresponde ao idioma em que o tipo é declarado .
NULL
é o C equivalent
de nil
, 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.
Eles quase são a mesma coisa, exceto,
nil
é usado no estilo Objective-C. onde NULL
é para ponteiros do tipo C e é tipificado para (void *)
.