Подтвердить что ты не робот

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

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

//.h
extern NSString * const MyConstant;

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

и

//.h
extern NSString *MyConstant;

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

Ответ 1

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

//.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 (первый) по умолчанию. компилятор сообщит вам, если вы попытаетесь изменить его в будущем, - тогда вы можете решить, была ли это ошибка от вашего имени или если объект, на который он указывает, может измениться. это хорошая защита, которая экономит много ошибок /headscratching.

другая вариация для значения:

extern int MyInteger; // << value may be changed anytime
extern const int MyInteger; // << a proper constant