Voici un exemple de code:
NSDictionary *myDictionary = [NSDictionary dictionary];
NSNumber *myNumber = [myDictionary valueForKey: @"MyNumber"];
NSLog(@"myNumber = %@", myNumber); // output myNumber = (null)
if (myNumber == nil)
NSLog(@"test 1 myNumber == nil");
if (myNumber == NULL)
NSLog(@"test 2 myNumber == NULL");
if ([myNumber isEqual:[NSNull null]])
NSLog(@"test 3 myNumber == [NSNull null]");
Quand dois-je utiliser nil, NULL et [NSNull null]?
objective-c
null
nsnull
Biranchi
la source
la source
nil
signifie une sorte d'NULL
instance for objc. Ainsi, vous pouvez marquer qu'une valeur spécifique est destinée à une instance objc ou à un pointeur générique. Compte tenu de la gestion des types et de la sécurité, cela vous aidera beaucoup.nil
etnull
/NULL
sont les mêmes - tous deux définis comme étant zéro. Par formalité, à utilisernil
lors du codage d'Objective-C etNULL
lors du codage d'instructions / d'appels C / C ++ normaux.NSNull
est quelque chose d'entièrement différent, cependant. C'est un objet singleton qui sert d'espace réservé pour représenter "rien" dans, par exemple, les NSDictionary où les pointeurs nil / null ne sont pas autorisés.Réponses:
Vous pouvez utiliser
nil
à peu près partout où vous pouvez utilisernull
. La principale différence est que vous pouvez envoyer des messages ànil
, vous pouvez donc l'utiliser dans certains endroits oùnull
pas travailler.En général, utilisez simplement
nil
.la source
#define nil NULL
[NSNull null]
s'agit d'une bête très différente. Pour citer la référence de classe NSNull , «La classe NSNull définit un objet singleton utilisé pour représenter les valeurs nulles dans les objets de collection (qui n'autorisent pas les valeurs nulles)». Consultez également la section Utilisation de NSNull des rubriques de programmation des nombres et des valeurs.NULL
.Ils diffèrent dans leurs types. Ils sont tous nuls, mais
NULL
est unvoid *
,nil
est unid
etNil
est un pointeur de classe.la source
NULL
vnil
, mais cela manque sérieusement la marque re[NSNull null]
. Consultez la section Utilisation de NSNull des rubriques de programmation de nombres et de valeurs et Référence de classe NSNull .void *
. Une réponse différente ici mentionne déjà cela, mais si vous creusezobjc.h
, vous trouverez la ligne#define nill __DARWIN_NULL
.nil est une valeur vide liée / correspondant à un objet (le type id en Objective-C). nil n'a pas de référence / adresse, juste une valeur vide.
Donc nil devrait être utilisé, si nous avons affaire à un objet.
Désormais, NULL est utilisé pour un pointeur non-objet (comme un pointeur C) dans Objective-C. Comme nul , NULL n'a aucune valeur ni adresse.
Donc, s'il y a une situation, lorsque je dois vérifier que ma structure (variable de type de structure) est vide ou non, j'utiliserai:
Prenons un autre exemple, le
De l' observation clé-valeur , le contexte doit être un pointeur C ou une référence d'objet. Ici, pour le contexte, nous ne pouvons pas utiliser nil ; nous devons utiliser NULL .
Enfin, la classe NSNull définit un objet singleton utilisé pour représenter des valeurs nulles dans des objets de collection (NSArray, NSDictionary). Le [NSNull null] sera renvoie l'instance de singleton de NSNull. Fondamentalement, [NSNull null] est un objet approprié.
Il n'existe aucun moyen d'insérer un objet nil dans un objet de type collection. Prenons un exemple:
Sur la deuxième ligne, nous n'obtiendrons aucune erreur, car il est parfaitement juste d'insérer un objet NSNull dans un objet de type collection. Sur la troisième ligne, nous obtiendrons l'erreur "l'objet ne peut pas être nul". Parce que nil n'est pas un objet.
la source
NULL et nil sont égaux l'un à l'autre, mais nil est une valeur d'objet tandis que NULL est une valeur de pointeur générique (
(void*)0
, pour être précis).[NSNull null]
est un objet qui est censé remplacer nul dans les situations où nul n'est autorisé. Par exemple, vous ne pouvez pas avoir de valeur nil dans un NSArray. Donc, si vous devez représenter un «nul», vous pouvez utiliser[NSNull null]
.la source
J'ai trouvé ce qui suit:
objc.h
_types.h
stddef.h
MacTypes.h
De son apparence, il n'y a pas de différence mais une différence conceptuelle.
la source
Méfiez-vous des
if([NSNull null])
retourstrue
.la source
Ils ne sont que des zéros typés. Fonctionnellement, il n'y a aucune différence entre eux. c'est à dire.,
Il y a une différence, mais seulement pour vous et les autres humains qui lisent le code, le compilateur s'en fiche.
Une autre chose nil est une valeur d'objet tandis que NULL est une valeur de pointeur générique.
la source
Dans les SDK OS X et iOS modernes:
nil
etNil
etNULL
sont identiques en Objective-C et en Objective-C ++ avant C ++ 11.nil
etNil
etstd::nullptr
sont identiques en Objective-C ++ avec C ++ 11.Stylistiquement, de nombreuses personnes préfèrent utiliser
nil
pour les objets Objective-C et /NULL
ounullptr
pour d'autres types de pointeurs. J'utilise moi-même maintenantnil
partout.[NSNull null]
est un objet singleton utilisé pour représenter des valeurs nulles dans des situations où ilnil
est interdit en tant que valeur (généralement dans un objet de collection tel qu'unNSArray
ouNSDictionary
). Rubriques de programmation de nombres et de valeurs: Utilisation de NSNullla source
Pour développer un commentaire de @cobbal:
MacTypes.h contient:
la source
Comme déjà mentionné, ce sont les mêmes, mais j'utilise l'un ou l'autre selon la langue dans laquelle le framework correspondant a été écrit.
Pour tout ce qui concerne Objective-C, j'utilise nil. Par exemple:
Cependant, lors de la vérification de la validité des modèles de données à partir d'un framework C (comme le framework AddressBook et CoreFoundation), j'utilise NULL. Par exemple:
De cette façon, j'ai des indices subtils dans mon code si je traite avec du code basé sur Obj-C ou C.
la source
nil est un pointeur d'objet vers rien. Bien que sémantiquement distincts de NULL , ils sont techniquement équivalents les uns aux autres.
Au niveau du framework, Foundation définit NSNull , qui définit une méthode de classe, + null, qui renvoie l'objet singleton NSNull. NSNull est différent de nil ou NULL , en ce sens qu'il s'agit d'un objet réel plutôt que d'une valeur nulle.
De plus, dans Foundation / NSObjCRuntime.h, Nil est défini comme un pointeur de classe vers rien.
Référez-vous ceci pour plus d'informations - nil / Nil / NULL / NSNull
la source
Il y a une différence dans certains contextes.
Littéralement, Null est un caractère: ASCII 0.
Nil équivaut à vide, aucune valeur.
Selon le contexte de programmation, cela peut être une grande différence.
la source
Utilisez NULL par exemple lorsque vous appelez une méthode Objective-C avec un paramètre de sortie de type (NSError **).
Je vois beaucoup d'exemples de code sur le Web où les gens fournissent nil au lieu de NULL dans ce cas. C'est parce que c'est un pointeur vers un pointeur et donc pas directement un type d'objet Objective-C. Comme indiqué ci-dessus, nil doit être utilisé pour les types d'objets Objective-C.
la source
Fondamentalement: nil: pointeur nul sur un objet et null: est pour un autre pointeur de type
la source
nil signifie l'absence de valeur tandis que NULL représente No Object,
NSArray * array = @ [@ "Hello World!", @ 101, [NSNULL null]];
Ici [NSNULL null] est un objet qui signifie aucun objet, en même temps vous ne pouvez pas ajouter nil pour indiquer l'absence d'objet.
vous pouvez également utiliser nil et [NSNUll null] pour la vérification.
la source
Cela vous aidera à comprendre la différence entre nil, NIL et null.
Le lien ci-dessous peut vous aider d'une certaine manière:
http://nshipster.com/nil/
la source