target-c - глобальные переменные - PullRequest
12 голосов
/ 10 января 2012

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

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

Должен ли я объявить его в таком объекте?

@public
type variable;

Ответы [ 3 ]

26 голосов
/ 10 января 2012

Все, что вам нужно, это использовать простые старые глобальные переменные 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, например.

10 голосов
/ 10 января 2012

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

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);
}

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

2 голосов
/ 10 января 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...