181 votes

NULL vs nil en Objective-C

En observeValueForKeyPath:ofObject:change:context: - pourquoi les docs utilisent-ils NULL au lieu de nil sans spécifier de pointeur de contexte ?

227voto

Paul Tomblin Points 83687

nil ne doit être utilisé qu'à la place d'un id ce que nous, programmeurs Java et C++, considérons comme un pointeur sur un objet. Utiliser NULL pour les pointeurs qui ne sont pas des objets.

Regardez la déclaration de cette méthode :

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

Le contexte est un void * (c'est-à-dire un pointeur de type C), vous devez donc absolument utiliser NULL (qui est parfois déclaré comme (void *)0 ) plutôt que nil (qui est du type id ).

64voto

Marc Charbonneau Points 30464

Techniquement, il s'agit de la même chose (0), mais nil est généralement utilisé pour un type d'objet Objective-C, tandis que NULL est utilisé pour les pointeurs de style C (void *).

53voto

Andrew Points 1099

Ils sont techniquement identiques et ne diffèrent que par leur style :

  • Le style Objective-C dit nil est ce qu'il faut utiliser pour le id (et des pointeurs sur des objets).
  • Le style C dit que NULL est ce que vous utilisez pour void * .
  • Le style C++ indique généralement qu'il faut simplement utiliser 0 .

J'utilise généralement la variante qui correspond à la langue dans laquelle le type est utilisé. déclarée .

15voto

NULL es el C equivalent de nil un pointeur sur rien ;

nil is zero typed as id ,

*`NULL is zero typed as void`** .

Un point important vous ne pouvez pas envoyer un message à NULL. Il est donc préférable d'utiliser nil en Objective-C à de nombreux endroits.

4voto

dan14941 Points 332

C'est presque la même chose, sauf que..,

nil est utilisé à la manière de l'Objective-C. où les NULL est pour les pointeurs de type C et est typée en (void *) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X