2009-11-02 13 views
7

das heißt ich will das in meinem Code bringen:Wo muss ich statische Variablen deklarieren?

static BOOL MyConstantBool = YES; 

es vor oder nach @implementation sein muss? Gibt es Regeln, wo man das platzieren kann? Kann es auch in die Header-Datei gehen?

+0

Duplizieren? http://stackoverflow.com/questions/1662828/how-to-define-a-bool-constant –

+5

@Alex - nicht ganz. Der andere war, wie man sie definiert. Hier können Sie sie definieren. –

Antwort

10

Wenn Sie eine globale Variable definieren möchten, spielt es keine Rolle, wo Sie sie platzieren (innerhalb oder außerhalb von @implementation). In diesem Zusammenhang bedeutet static, dass die Variable nur innerhalb dieser Kompilierungseinheit (.m-Datei) sichtbar ist.

Es gibt auch statische Variablen, die in Funktionen definiert sind. Sie funktionieren wie globale Variablen, sind aber nur innerhalb des Funktionsumfangs sichtbar.

1

Wenn es nach dem @implementation Block ist, dann können Sie es nicht im @implementation Block verwenden (es sei denn, es wurde an anderer Stelle mit weiter vorne deklariert). Hier ist, wie ich es mache:

//Constants.h 
extern BOOL MyConstantBool; 
extern NSString* MyConstantString; 


//Constants.m 
#import "Constants.h" 
BOOL MyConstantBool = YES; 
NSString* MyConstantString = @"Hello, world!"; 


//SomeOtherFile.m 
#import "Constants.h" 
//you can now use anything declared in Constants.h 
+0

Kann nicht 'statisch' und' extern' gleichzeitig sein. –

+0

@Carl ACK! danke für die Korrektur. Ich habe die Antwort bearbeitet –

0

Globals können so ziemlich überall hingehen, wohin Sie wollen; leg es einfach an welchen Ort auch immer stilistisch Sinn macht. Ich bevorzuge es, Globals nahe der Spitze der Quelldateien persönlich zu sehen.

Während Sie die Definition in eine Header-Datei setzen konnte, empfehle ich es nicht. Das Einfügen einer beliebigen Definition in eine Header-Datei kann im weiteren Verlauf zu mehrfach definierten Symbollinker-Fehlern führen. Wenn Sie mehr als eine Kompilierungseinheit benötigen, um die Variable zu sehen, können Sie sie trotzdem nicht static machen. Sie müssen sie irgendwo in einer Implementierungsdatei definieren und extern verwenden, um sie unter verschiedenen Quelldateien sichtbar zu machen.

Verwandte Themen