“extern const”vs“extern”only

时间:2011-09-03 22:19:28

标签: objective-c global-variables constants extern

我已经看到了两种创建全局变量的方法,区别是什么,以及何时使用它们?

//.h
extern NSString * const MyConstant;

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

//.h
extern NSString *MyConstant;

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

1 个答案:

答案 0 :(得分:33)

前者是常量的理想选择,因为它指向的字符串无法更改:

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