Как объявить переменную в файле main.m
, чтобы она была доступна во всех классах?
Если я просто объявлю его в функции main
, компилятор скажет, что он не объявлен в методе класса.
Должен ли я объявить это в таком объекте?
@public
type variable;
Как объявить переменную в файле main.m
, чтобы она была доступна во всех классах?
Если я просто объявлю его в функции main
, компилятор скажет, что он не объявлен в методе класса.
Должен ли я объявить это в таком объекте?
@public
type variable;
Все, что вам нужно, это использовать старые глобальные переменные 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.
Не совсем уверен, почему вы хотите это сделать, но вы могли бы, если бы захотели.
основной.м:
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);
}
Но, пожалуйста, хорошенько подумайте, прежде чем приступать к использованию чего-то подобного!
Помимо отладки, я не вижу причин даже пытаться модифицировать файл main.m для прямого взаимодействия с логикой вашего приложения.
Вы можете попробовать определить константу в файле Your_project_name_Prefix.pch, если это вам подходит. Или объявите статическую переменную в вашем делегате приложения или в любом из классов вашего приложения.
Чтобы узнать больше о константах и статических переменных, перейдите по этой ссылке: