2009-11-02 8 views
7

dire que je veux apporter dans mon code:Où dois-je déclarer les variables statiques?

static BOOL MyConstantBool = YES; 

Doit-il avant ou après @implementation? Y a-t-il des règles pour placer cela? Peut-il aussi aller dans le fichier d'en-tête?

+0

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

+5

@Alex - pas tout à fait. L'autre était de savoir comment les définir. C'est là que vous les définissez. –

Répondre

10

Si vous voulez définir une variable globale, peu importe où vous la placez (à l'intérieur ou à l'extérieur de @implementation). Dans ce contexte, static signifie que la variable n'est visible qu'à partir de cette unité de compilation (fichier .m).

Il existe également des variables statiques, définies dans les fonctions. Ils fonctionnent comme des variables globales, mais sont visibles uniquement à partir de la portée de la fonction.

1

Si c'est après le bloc , vous ne pouvez pas l'utiliser dans le bloc @implementation (sauf s'il a été déclaré à un autre endroit en utilisant extern). Voici comment je le fais:

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

Ne peut pas être 'static' et' extern' en même temps. –

+0

@Carl ACK! Merci pour la correction. J'ai modifié la réponse –

0

Les globaux peuvent aller à peu près partout où vous voulez; il suffit de le mettre dans n'importe quel endroit a un sens stylistique. Je préfère voir les globals près du haut des fichiers sources, personnellement.

Bien que vous puissiez mettre la définition dans un fichier d'en-tête, je ne le recommande pas. Mettre n'importe quel type de définition dans un fichier d'en-tête peut conduire à des erreurs de liens de symboles multipliées-définies sur la route. Si vous avez besoin de plus d'une unité de compilation pour voir la variable, vous ne pouvez pas le faire static de toute façon - vous devrez le définir dans un fichier d'implémentation quelque part et utiliser extern pour le rendre visible parmi les différents fichiers sources.