En observeValueForKeyPath:ofObject:change:context:
- pourquoi les docs utilisent-ils NULL
au lieu de nil
sans spécifier de pointeur de contexte ?
Réponses
Trop de publicités?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
).
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 leid
(et des pointeurs sur des objets). - Le style C dit que
NULL
est ce que vous utilisez pourvoid *
. - 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 .