Еще один пример проблемы, когда не используется extern
:
Скажем, у вас есть глобальная переменная в заголовочном файле:
NSString *globalVar = @"Wonderful";
И вы используете его в 3 местах, импортируя этот заголовочный файл. Ваш код не будет компилироваться, компоновщик жалуется, что в вашем коде определены 3 повторяющихся символа. Для ее решения у вас есть два выхода:
Используйте static
, в этом случае для каждого файла, импортирующего этот заголовок, будет определена отдельная ссылка (и изменение одной строки не повлияет на другие строки, импортированные в другие файлы):
static NSString *globalVar = @"Wonderful";
Используйте extern
в файле .h и определите его в файле .m. Таким образом, будет определена только одна ссылка, и каждый файл будет использовать эту же ссылку (изменения отражаются во всех файлах):
extern NSString *globalVar; // in .h
NSString *globalVar = @"Wonderful"; // in .m
Выберите подход, который подходит лучше всего.