Dans observeValueForKeyPath:ofObject:change:context:
_ pourquoi la documentation utilise-t-elle NULL
au lieu de nil
sans spécifier de pointeur de contexte?
nil
ne devrait être utilisé qu'à la place d'un id
, ce que nous Java et C++ considéreraient comme un pointeur sur un objet. Utilisez NULL
pour les pointeurs non-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 style C), vous utiliserez donc certainement NULL
(qui est parfois déclaré comme (void *)0
) plutôt que nil
(qui est de type id
).
Ils sont techniquement identiques (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 identiques et ne diffèrent que par leur style:
nil
est ce qu’il faut utiliser pour le type id
(et les pointeurs sur les objets).NULL
est ce que vous utilisez pour void *
.0
.J'utilise généralement la variante qui correspond à la langue où le type est déclaré.
NULL
est le C equivalent
de nil
, un pointeur sur rien;
où nil is zero typed as id
,
NULL is zero typed as void*
.
n 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,
nil
est utilisé dans un style Objective-C. où NULL
est pour les pointeurs de type C et est typé à (void *)
.