2010-11-22 5 views
3

In objective-c ist das Endergebnis von das gleiche wie variable==nil Auch ich glaube, ich las irgendwo, dass iVars auf "Null" (d. H. O) initialisiert werden, aber leider kann ich nicht finden, wo ich es jetzt entdeckte. Wenn ich richtig bin, ist diese Initialisierung zu keinem Teil der Deklaration eines iVar oder ist es mit etwas anderem verbunden wie @property?Machen Sie "!" und "nil" geben das gleiche Ergebnis?

d tun diese die gleiche bewerten ...

if(!myObject) ... 

und

if(myObject == nil) ... 

Prost Gary.

Bearbeitet: hoffentlich für mehr Klarheit.

Antwort

3

Ihre Frage Betreff und Frage Körper erscheinen verschiedene Dinge zu fragen, so ...

die Frage Thema zu beantworten: Nein, ! und nil sind nicht alle gleich. ! ist ein Operator, der die logische Negation seines Operanden zurückgibt (das heißt, !01 kehrt und ! mit irgend etwas anderes ergibt 0), während nil ein Makro für 0 ist

die Frage selbst zu beantworten: Ja, !foo und foo == nil geben das gleiche Ergebnis für Objektvariablen. Und ja, Instanzvariablen werden auf 0 initialisiert. So sind statische Variablen und globale Variablen.

+0

Ich denke, die Frage war schlecht formuliert, ich verstehe, dass sie nicht in Bezug auf die Operation identisch sind, ich hätte klarer und präziser sein sollen, es war das Ergebnis, an dem ich interessiert war. – fuzzygoat

1

! ist ein C logischer Operator, der bedeutet, nicht (wie & & bedeutet und und || bedeutet oder).

nil ist die Möglichkeit, einen unitären Objektzeiger auszudrücken.

Angewandt auf einen Zeiger, der Wert des Ausdrucks ist WAHR, wenn der Zeiger NULL oder nil ist. Am Ende haben if(!myObject) und if(myObject==nil) das gleiche Verhalten.

+1

Entschuldigung, was ich bekam, war! MyObject (gibt TRUE oder FALSE) und myObject == nil (gibt TRUE oder FALSE)? – fuzzygoat

1

In Objective-C ! ist ein boolescher Operator und gibt das Gegenteil eines booleschen Werts oder Ausdrucksergebnisses zurück. Im folgenden Beispiel evaluiert myObj seinen Zeigerwert als Boolean, Null oder Nicht-Null. Da myObj ein Nicht-Null-Zeiger ist, wird dies als wahr ausgewertet. ! myObj wird das Gegenteil zurückgeben, in diesem Fall würde es false zurückgeben.

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

Es ist nicht, weil "myObj ist ein gültiger Zeiger", der es als wahr bewertet. Dies liegt daran, dass es sich um einen Zeiger ungleich Null handelt. – warrenm

+0

das ist, was ich meinte, aber Sie haben Recht, ich habe nicht geschrieben, was ich meinte. Ich werde meine Antwort aktualisieren, danke. – slycrel

Verwandte Themen