2009-06-15 6 views
10

Das heißt, nicht ObjectiveC wie C, dass verhalten, wenn Sie einen Zeiger zum Beispiel zu erstellen:Sind in ObjectiveC Zeiger, bei denen es sich um Klasseninstanzvariablen handelt, die auf 'Null' initialisiert wurden, oder anders?

NSString* c; 

Does c Punkt auf Null oder auf den Zufallswert im Bereich Speichers, der für sie reserviert war?

Mit anderen Worten, werden Zeiger vorinitialisiert, oder muss ich das selbst tun? Wie ich schon sagte, ist mir klar, dass dies in C/C++ nicht der Fall ist, aber ich frage mich, ob es hier eine ObjC Magie gibt oder nicht.

Antwort

13

Klasseninstanzen Variablen in Objective-C werden garantiert, um ihre leeren Wert initialisiert werden (0, nil, etc ...)

+0

Brilliant - Prost. Leider bedeutet das, dass mein Fehler nicht dort ist, wo ich es dachte. – Chaos

+0

Genauer gesagt wird der Speicherplatz für eine Klasse auf Null gesetzt, wenn sie zugewiesen wird. Zeiger in einer Methode oder Funktion funktionieren genau wie in C. – Chuck

1

Sie sind gleich Null, und Sie werden diese zu übernehmen dürfen, beispielsweise durch Testen :

if (nil == myVariableIHaventInitialisedYet) 
{ 
    myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove]; 
} 
+0

Netter Yoda-Code! – toxaq

3

Klasseninstanzvariablen und statische/globale Variablen werden entsprechend auf nil/NULL/0/false initialisiert.

Lokale Variablen werden jedoch nicht initialisiert.

0

Achten Sie auf lokale Variablen auf diesem. Sie werden nicht auf Null initialisiert, also stellen Sie sicher, dass sie irgendwo initialisiert wurden, bevor Sie sie verwenden, wenn Sie in Ihrer Deklaration nicht initialisiert haben. Wie Peter sagt, Klasse, Instanz und Statik sind für dich in Ordnung, also mach dir keine Sorgen.

Normalerweise keine Probleme, aber insbesondere wird es einen Unterschied in Aufrufen mit übergebenen Zeigerreferenzen machen (wie NSError **).

Verwandte Themen