Objective-c - глобальные переменные
Как объявить переменную в файле main.m
так, чтобы она была доступна во всех классах?
Если я просто объявляю его в функции main
, компилятор говорит, что он не объявлен в методе класса.
Должен ли я объявить его в объекте, подобном этому?
@public
type variable;
Ответы
Ответ 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