2011-09-03 17 views
17

グローバル変数を作成する2つの方法、その違いは何ですか?また、それぞれをいつ使用しますか?"extern const"対 "extern"のみ

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