Réponses:
nil
ne 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 NULL
pour 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
).
context
in observeValueForKeyPath:ofObject:change:context:
est void *
, cela ne signifie-t-il pas que les données passées en tant que context
peuvent ê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 NULL
place 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:
nil
ce qu'il faut utiliser pour le id
type (et les pointeurs vers des objets).NULL
c'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é .
NULL
est le C equivalent
de 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,
nil
est utilisé dans un style Objective-C. où NULL
est pour les pointeurs de type C et est typé à (void *)
.