7 Stimmen

Wo muss ich statische Variablen deklarieren?

D.h. ich möchte dies in meinen Code einbringen:

static BOOL MyConstantBool = YES;

Muss sie vor oder nach der @Implementierung stehen? Gibt es Regeln, wo das zu platzieren ist? Kann es auch in der Header-Datei stehen?

10voto

Nikolai Ruhe Punkte 80427

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

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

1voto

Dave DeLong Punkte 240835

Wenn es nach der @implementation Block, dann können Sie ihn nicht in der @implementation Block (es sei denn, er wurde an anderer Stelle mit extern ). So mache ich es:

//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

0voto

Carl Norum Punkte 210051

Globals können so ziemlich überall untergebracht werden, wo Sie wollen; setzen Sie sie einfach an die Stelle, die stilistisch sinnvoll ist. Ich persönlich ziehe es vor, Globals am Anfang der Quelldateien zu sehen.

Sie können die Definition zwar in eine Header-Datei aufnehmen, aber ich empfehle das nicht. Jede Art von Definition in einer Header-Datei kann später zu mehrfach definierten Symbol-Linker-Fehlern führen. Wenn mehr als eine Kompiliereinheit die Variable sehen soll, können Sie sie nicht in eine Header-Datei schreiben. static sowieso - Sie müssen sie irgendwo in einer Implementierungsdatei definieren und die extern um sie unter verschiedenen Quelldateien sichtbar zu machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X