L' NULL
de la valeur pour Objective-C des objets (type id
) est nil
.
Alors qu' NULL
est utilisé pour C les pointeurs (type void *
).
(À la fin, les deux finissent par la même valeur (0x0
). Ils diffèrent dans le type de cependant.)
En Objective-C:
-
nil
(tout en minuscule) est une valeur null
pointeur vers un Objectif-C objet.
-
Nil
(en majuscule) est un pointeur null
pour un Objectif-C de classe.
-
NULL
(en majuscule) est un pointeur null pour
rien d'autre (C les pointeurs, qui est).
-
[NSNull null]
est un singleton pour les situations où l'utilisation de néant n'est pas possible (ajout/réception néant vers/à partir de NSArray
s par exemple)
En Objective-C++:
-
Tous les ci-dessus, plus:
-
null
(en minuscules) ou nullptr
(C++11 ou version ultérieure) est un pointeur null pour les objets C++ .
Afin de vérifier l'encontre nil
vous devez comparer nil
(ou NULL
respectivement) explicitement:
if (getCaption == nil) ...
ou laissez - ObjC / C le faire implicitement pour vous:
if (!getCaption) ...
Cela fonctionne comme chaque expression en C (et avec Objective-C d'être un sur-ensemble de celui-ci) a un accord implicite de valeur booléenne:
expression != 0x0 => true
expression == 0x0 => false
Maintenant, lors de la vérification des NSNull
de toute évidence, cela ne marcherait pas aussi [NSNull null]
renvoie un pointeur sur une instance du singleton de NSNull
, et pas nil
, et par conséquent, il n'est pas égal à 0x0
.
Afin de vérifier l'encontre NSNull
on peut soit utiliser:
if ((NSNull *)getCaption == [NSNull null]) ...
ou (de préférence, voir les commentaires):
if ([getCaption isKindOfClass:[NSNull class]]) ...
Gardez à l'esprit que le dernier (de par l'utilisation d'un message d'appel) sera de retour false
si getCaption
arrive à être nil
, qui, bien que formellement correct, peut-être pas ce que vous attendez/le souhaitez.
Donc si l'un (pour quelque raison que ce soit) nécessaires pour vérifier à la fois nil
/NULL
et NSNull
, il faudrait combiner ces deux vérifications:
if (!getCaption || [getCaption isKindOfClass:[NSNull class]]) ...
Pour obtenir de l'aide sur la création de l'équivalent positif contrôles de voir De Morgan, de la législation et de la négation booléenne.
Edit: NSHipster.com tout juste de publier un excellent article sur les différences subtiles entre nil, null, etc.