2011-09-03 95 views
17

我見過兩種創建全局變量的方法,有什麼區別,以及你什麼時候使用它們?「extern const」vs「extern」only

//.h 
extern NSString * const MyConstant; 

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

//.h 
extern NSString *MyConstant; 

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

回答

32

前者是理想的常量,因爲字符串它指向不能被改變:

//.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 =\ 
總之

,使用const的(前)在默認情況下。編譯器會讓你知道你是否試圖改變它 - 然後你可以決定是否代表你的錯誤,或者它指向的對象可能會改變。這是一個很好的保護措施,可以節省大量的錯誤/頭疼。

的其他變型爲值:

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