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

Objective-c - глобальные переменные

Как объявить переменную в файле main.m так, чтобы она была доступна во всех классах?

Если я просто объявляю его в функции main, компилятор говорит, что он не объявлен в методе класса.

Должен ли я объявить его в объекте, подобном этому?

@public
type variable;
4b9b3361

Ответ 1

Все, что вам нужно, это использовать простые старые глобальные переменные C.

Сначала определите переменную в main.m перед вашей функцией main:

#import <...>

// Your global variable definition.
type variable;

int main() {
    ...

Во-вторых, вам нужно сообщить об этом другим исходным файлам. Вам нужно объявить его в каком-то файле .h и импортировать этот файл во все файлы .m, в котором вам нужна ваша переменная:

// .h file

// Declaration of your variable.    
extern type variable;

Обратите внимание, что вы не можете назначить значение переменной в блоке объявления, иначе оно станет определением этой переменной, и вы закончите с ошибкой компоновщика, жалующейся на несколько определений с тем же именем.

Чтобы все было ясно: каждая переменная может быть объявлена ​​несколько раз (декларация говорит, что эта переменная существует где-то), но определяется только один раз (определение фактически создает память для этой переменной).

Но будьте осторожны, глобальные переменные являются плохой практикой кодирования, потому что их значение может быть неожиданно изменено в любом из файлов, поэтому вы можете столкнуться с трудностями для отладки ошибок. Например, вы можете избежать глобальных переменных, используя шаблон Singleton.

Ответ 2

Не уверен, почему вы хотите это сделать, но можете, если хотите.

main.m:

int someGlobal = 0; ///< Added outside any function, at the top say.

SomeClass.m:

extern int someGlobal; ///< Added at the top, outside the class implementation.

...

- (void)useGlobal {
    NSLog(@"someGlobal = %i", someGlobal);
    someGlobal = 5;
    NSLog(@"someGlobal = %i", someGlobal);
}

Но, пожалуйста, подумайте, прежде чем приступать к использованию чего-то подобного!

Ответ 3

Помимо отладки, я не вижу причин даже попробовать и изменить файл main.m, чтобы напрямую взаимодействовать с вашей логикой приложения.

Вы можете попытаться определить константу в файле Your_project_name_Prefix.pch, если это соответствует вашим потребностям. Или объявите статическую переменную в делетете приложения или любом из классов вашего приложения.

Чтобы узнать больше о константах и ​​статических переменных, перейдите по этой ссылке:

http://iosdevelopertips.com/objective-c/java-developers-guide-to-static-variables-in-objective-c.html