только "extern const" и "extern" - PullRequest
       18

только "extern const" и "extern"

17 голосов
/ 04 сентября 2011

Я видел 2 способа создания глобальных переменных, в чем разница, и когда вы используете каждый из них?

//.h
extern NSString * const MyConstant;

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

и

//.h
extern NSString *MyConstant;

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

1 Ответ

33 голосов
/ 04 сентября 2011

первый идеален для констант, потому что строка, на которую он указывает, не может быть изменена:

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