NULL vs nil em Objective-C

Em observeValueForKeyPath:ofObject:change:context: – por que os documentos usam NULL vez de nil quando não especificam um ponteiro de contexto?

nil deve ser usado apenas no lugar de um id , o que os programadores Java e C ++ considerariam como um ponteiro para um object. Use NULL para pointers sem object.

Veja a declaração desse método:

 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 

Context é um void * (ou seja, um ponteiro no estilo C), então você definitivamente usa NULL (que às vezes é declarado como (void *)0 ) ao invés de nil (que é do tipo id ).

Eles são tecnicamente a mesma coisa (0), mas nil é normalmente usado para um tipo de object Objective-C, enquanto NULL é usado para pointers no estilo c (void *).

Eles são tecnicamente a mesma coisa e diferem apenas no estilo:

  • O estilo Objective-C diz que nil é o que usar para o tipo de id (e pointers para objects).
  • O estilo C diz que NULL é o que você usa para void * .
  • O estilo C ++ geralmente diz que você deve usar apenas 0 .

Eu normalmente uso a variante que corresponde ao idioma em que o tipo é declarado .

NULL é o C equivalent de nil , um ponteiro para 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. Por isso, é preferível usar nil no objective-C em muitos lugares.

Eles são quase a mesma coisa, exceto

nil é usado em um estilo Objective-C. onde NULL é para pointers do tipo C e é typdef para (void *) .