2009-11-02 18 views
7

vale a dire che voglio portare questo nel mio codice:Dove devo dichiarare le variabili statiche?

static BOOL MyConstantBool = YES; 

si debba prima o dopo @implementation? Ci sono regole dove metterlo? Può anche andare nel file di intestazione?

+0

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

+5

@Alex - non del tutto. L'altro era come definirli. Questo è dove definirli. –

risposta

10

Se si desidera definire una variabile globale, non importa dove la si inserisce (all'interno o all'esterno di @implementation). In questo contesto, static significa che la variabile è visibile solo all'interno dell'unità di compilazione (file .m).

Ci sono anche variabili statiche, che sono definite nelle funzioni. Funzionano come variabili globali, ma sono visibili solo all'interno dell'ambito della funzione.

1

Se è dopo il blocco @implementation, quindi non è possibile utilizzare nel blocco @implementation (meno che non sia stato dichiarato in avanti da qualche altra parte utilizzando extern). Ecco come faccio:

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

Non può essere 'static' e' extern' allo stesso tempo. –

+0

@Carl ACK! grazie per la correzione. Ho modificato la risposta –

0

Globali possono andare più o meno dove vuoi; basta metterlo in qualsiasi posto abbia senso stilisticamente. Preferisco vedere i globals nella parte superiore dei file di origine, personalmente.

Mentre è possibile inserire la definizione in un file di intestazione, non è consigliabile. Mettendo qualsiasi tipo di definizione in un file di intestazione può portare a errori di linker di simboli definiti in modo multiplo in fondo alla strada. Se hai bisogno di più di una unità di compilazione per vedere la variabile, non puoi renderla ugualmente static - devi definirla in un file di implementazione da qualche parte e usare extern per renderla visibile tra i vari file di origine.

Problemi correlati