Réponses:
nilne doit être utilisé qu'à la place d'un id, ce que nous, les programmeurs Java et C ++, considérerions comme un pointeur vers un objet. À utiliser NULLpour les pointeurs non-objet.
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 style C), donc vous utiliseriez certainement NULL(qui est parfois déclaré comme (void *)0) plutôt que nil(qui est de type id).
contextin observeValueForKeyPath:ofObject:change:context:est void *, cela ne signifie-t-il pas que les données passées en tant que contextpeuvent être un pointeur d'objet? Je pense que c'est un cas courant. C'est pourquoi je ne comprends pas pourquoi les documents utilisent toujours à la NULLplace de nil.
Ils sont techniquement 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 *).
Ils sont techniquement la même chose et ne diffèrent que par le style:
nilce qu'il faut utiliser pour le idtype (et les pointeurs vers des objets).NULLc'est ce que vous utilisez void *.0.J'utilise généralement la variante qui correspond à la langue dans laquelle le type est déclaré .
NULLest le C equivalentde nil, un pointeur vers rien;
où nil is zero typed as id,
NULL is zero typed as void*.
Un point important, vous ne pouvez pas envoyer de message à NULL. Il est donc préférable d'utiliser nil dans l'objectif-C à de nombreux endroits.
Ils sont presque la même chose sauf,
nilest utilisé dans un style Objective-C. où NULLest pour les pointeurs de type C et est typé à (void *).