我已经看到了两种创建全局变量的方法,区别是什么,以及何时使用它们?
//.h
extern NSString * const MyConstant;
//.m
NSString * const MyConstant = @"MyConstant";
和
//.h
extern NSString *MyConstant;
//.m
NSString *MyConstant = @"MyConstant";
答案 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