extern - это способ явно указать для удобства чтения и применения во время компиляции, что вы просто объявляете эту переменную здесь и фактически ожидаете, что она будет определена в другом месте. Если вы также попытаетесь определить переменную extern, компилятор сообщит вам об ошибках вашего пути. Это полезно для глобальных переменных для предотвращения конфликта имен и нескольких определений, которые приведут к ошибкам компоновщика. Однако само ключевое слово extern не делает переменную глобальной.
Что делает переменную глобальной, это позиция ее объявления в файле. Если бы вы объявили переменную вне @interface в файле заголовка класса, вы бы объявили переменную, которая является общей и видимой для всех экземпляров вашего класса, а также для всех, кто #import заголовка. Если бы вы (и, очевидно, сделали) объявить переменную вне @implementation в файле .m вашего класса, вы бы также объявили переменную, которая является общей для всех экземпляров вашего класса, но не видна никому, кто # импортирует ваш заголовок.
Итак, используйте позицию объявлений переменных для определения области видимости. Вы только определите этих глобальных переменных в одном месте. Для всех других мест, которые вы объявляете для них , добавьте к объявлению префикс extern, чтобы сделать код читаемым, ваши намерения ясными и чтобы вы не попытались определить его снова.