2009-11-02 12 views
7

es decir, quiero llevar esto en mi código:¿Dónde debo declarar las variables estáticas?

static BOOL MyConstantBool = YES; 

¿Tiene que ser antes o después de @implementation? ¿Hay reglas sobre dónde ubicar eso? ¿También puede entrar en el archivo de encabezado?

+0

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

+5

@Alex - no del todo. El otro era cómo definirlos. Aquí es donde definirlos. –

Respuesta

10

Si desea definir una variable global, no importa donde usted lo pone (dentro o fuera de @implementation). En este contexto, static significa que la variable solo es visible desde esta unidad de compilación (archivo .m).

También son variables estáticas, que se definen en las funciones. Funcionan como variables globales, pero solo son visibles desde el alcance de la función.

1

Si está después del bloque @implementation, entonces no puede usarlo en el bloque @implementation (a menos que haya sido anunciado en otro lugar usando extern). He aquí cómo lo hago:

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

No puede ser 'static' y' extern' al mismo tiempo. –

+0

@Carl ACK! gracias por la corrección. He editado la respuesta –

0

Globals pueden ir prácticamente cualquier lugar que desee; simplemente ponlo en cualquier lugar que tenga sentido estilísticamente. Prefiero ver globales cerca de los archivos fuente, personalmente.

Si bien se puede poner la definición en un fichero de cabecera, no lo recomiendo. Poner cualquier tipo de definición en un archivo de encabezado puede conducir a errores de enlazador de símbolos definidos múltiples en el camino. Si necesita más de una unidad de compilación para ver la variable, no se puede hacer que sea static de todos modos - que necesita para definirlo en un archivo de aplicación en alguna parte y utilizar extern para que sea visible entre varios archivos de origen.

Cuestiones relacionadas