2010-11-22 9 views
3

Dans l'objectif-c est le résultat final de !variable le même que variable==nil Aussi je pense que j'ai lu quelque part que les iVars sont initialisés à "nul" (c'est-à-dire o) mais malheureusement je ne peux pas trouver où je l'ai repéré maintenant. Si j'ai raison, cette initialisation est-elle une partie de la déclaration d'un iVar ou est-elle liée à quelque chose d'autre comme @property?Faites "!" et "nul" donner le même résultat?

à savoir ce que ces évaluent la même ...

if(!myObject) ... 

et

if(myObject == nil) ... 

Vive Gary.

Édité: espérons pour plus de clarté.

Répondre

3

Votre question corps sujet et la question semble se poser des choses différentes, donc ...

Pour répondre à la question de la question: Non, ! et nil ne sont pas du tout les mêmes. ! est un opérateur qui renvoie la négation logique de son opérande (qui est, !0 retours 1 et ! avec 0 autres cas, retourne), tandis que nil est une macro pour 0.

Pour répondre à la question elle-même: Oui, et !foofoo == nil donne le même résultat pour les variables d'objet. Et oui, les variables d'instance sont initialisées à 0. Il en va de même pour les variables statiques et les variables globales.

+0

Je pense que la question était mal formulée, je comprends qu'ils ne sont pas les mêmes en termes de fonctionnement, j'aurais dû être plus clair et j'ai précisé que c'était le résultat qui m'intéressait. – fuzzygoat

1

! est un opérateur logique C cela signifie pas (comme & & signifie et et || signifie ou).

nil est la manière d'exprimer un pointeur d'objet unitialisé.

Appliqué à un pointeur, la valeur de l'expression est TRUE chaque fois que le pointeur est NULL ou nil. En fin de compte, if(!myObject) et if(myObject==nil) ont le même comportement.

+1

Désolé, ce que j'obtenais était! MyObject (donne TRUE ou FALSE) et myObject == nil (donne TRUE ou FALSE)? – fuzzygoat

1

Dans l'objectif-c, ! est un opérateur booléen et renvoie l'opposé d'une valeur booléenne ou d'un résultat d'expression. Dans l'exemple ci-dessous, myObj évalue réellement sa valeur de pointeur comme une valeur booléenne, zéro ou non nulle. MyObj étant un pointeur différent de zéro, ceci est vrai. ! myObj retournera le contraire, dans ce cas il retournera faux.

id myObj = nil; 
int x = 0; 
if (myObj) 
    x++; 
+0

Ce n'est pas parce que "myObj est un pointeur valide" qu'il évalue à true. C'est parce que c'est un pointeur non nul. – warrenm

+0

c'est ce que je voulais dire, mais vous avez raison, je n'ai pas tapé ce que je voulais dire. Je vais mettre à jour ma réponse, merci. – slycrel

Questions connexes