2011-09-03 10 views
17

He visto 2 formas de crear variables globales, ¿cuál es la diferencia y cuándo las usa?"extern const" vs "extern" only

//.h 
extern NSString * const MyConstant; 

//.m 
NSString * const MyConstant = @"MyConstant"; 

y

//.h 
extern NSString *MyConstant; 

//.m 
NSString *MyConstant = @"MyConstant"; 

Respuesta

32

el primero es ideales para las constantes porque la cadena que apunta no puede ser cambiado:

//.h 
extern NSString * const MyConstant; 

//.m 
NSString * const MyConstant = @"MyConstant"; 
... 
MyConstant = @"Bad Stuff"; // << YAY! compiler error 

and 

//.h 
extern NSString *MyConstant; 

//.m 
NSString *MyConstant = @"MyConstant"; 
... 
MyConstant = @"Bad Stuff"; // << NO compiler error =\ 

en definitiva, el uso const (el primero) por defecto. el compilador le informará si intenta cambiarlo en el futuro; luego puede decidir si fue un error en su nombre o si el objeto al que apunta puede cambiar. es una buena protección que ahorra muchos errores/arañazos.

la otra variación es para un valor de:

extern int MyInteger; // << value may be changed anytime 
extern const int MyInteger; // << a proper constant