За пределами любого объявления или реализации класса,
int ran;
определяет переменную с именем ran
типа int
, независимо от того, находится ли эта строка в .h
, .c
или .m
файл.Обычно это ошибка в .h
, потому что если .h
содержит более одного файла, переменная определяется дважды или более.
extern int ran;
указывает, что переменная с именем ran
типа int
был определен в другом месте, и компоновщик должен его найти.
Обычно общая структура объявления глобальных переменных в C (и, следовательно, в Objective-C):
globals.h:
extern int ran;
global.c:
int ran;
myWonderfulApp.m:
#import "globals.h"
...
ran = 42;
Если вам нужна глобальная переменная, котораяснаружи не видно .m
, используйте:
static int ran;
Вы можете использовать его извне, если вы предоставляете методы получения и установки, но не если вы объявляете extern int ran;
там, где вам это нужно.