"extern const"vs"extern"only

Can*_*ito 18 constants global-variables objective-c extern

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

//.h
extern NSString * const MyConstant;

//.m
NSString * const MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)

//.h
extern NSString *MyConstant;

//.m
NSString *MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)

jus*_*tin 34

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

//.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 =\
Run Code Online (Sandbox Code Playgroud)

简而言之,默认情况下使用const(前者).编译器会告诉您是否尝试更改它 - 然后您可以代表您确定它是否是错误,或者它指向的对象是否可能发生变化.它是一个很好的保护措施,可以节省大量的bug/headscratching.

另一个变化是一个值:

extern int MyInteger; // << value may be changed anytime
extern const int MyInteger; // << a proper constant
Run Code Online (Sandbox Code Playgroud)