Dans observeValueForKeyPath:ofObject:change:context:
- pourquoi les documents utilisent-ils à la NULL
place de nil
lorsqu'ils ne spécifient pas de pointeur de contexte?
objective-c
cocoa
null
erikprice
la source
la source
Réponses:
nil
ne doit être utilisé qu'à la place d'unid
, ce que nous, les programmeurs Java et C ++, considérerions comme un pointeur vers un objet. À utiliserNULL
pour les pointeurs non-objet.Regardez la déclaration de cette méthode:
Le contexte est un
void *
(c'est-à-dire un pointeur de style C), donc vous utiliseriez certainementNULL
(qui est parfois déclaré comme(void *)0
) plutôt quenil
(qui est de typeid
).la source
context
inobserveValueForKeyPath:ofObject:change:context:
estvoid *
, cela ne signifie-t-il pas que les données passées en tant quecontext
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 à laNULL
place denil
.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 *).
la source
NULL
est défini différemment denil
.nil
est défini comme(id)0
.NULL
n'est pas.Ils sont techniquement la même chose et ne diffèrent que par le style:
nil
ce qu'il faut utiliser pour leid
type (et les pointeurs vers des objets).NULL
c'est ce que vous utilisezvoid *
.0
.J'utilise généralement la variante qui correspond à la langue dans laquelle le type est déclaré .
la source
NULL
est leC equivalent
denil
, 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.
la source
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 *)
.la source