如何在main.m
文件中声明一个变量,使其在所有类中都可用?
如果我只是在main
函数中声明它,编译器会说它在类方法中未声明。
我必须在这样的对象中声明它吗?
@public
type variable;
您所需要的只是使用普通的旧C全局变量。
首先,在main
函数之前在main.m
中定义一个变量:
#import <...>
// Your global variable definition.
type variable;
int main() {
...
其次,你需要让其他源文件知道它。你需要在某个.h
文件中声明它,并在所有需要变量的.m
文件中导入该文件:
// .h file
// Declaration of your variable.
extern type variable;
请注意,您不能在声明块中为变量赋值,否则它将成为该变量的定义,并且您将以报告多个同名定义的链接器错误结束。
为了清楚起见:每个变量都可以被多次声明(声明说这个变量存在于某个地方),但只能被定义一次(定义实际上为该变量创建了内存)。
但是要注意,全局变量是一种糟糕的编码方法,因为它们的值可能会在任何文件中意外更改,所以您可能会遇到难以调试的错误。例如,您可以使用Singleton模式来避免全局变量。
不确定你为什么要这么做,但如果你愿意,你可以。
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);
}
但是,在开始使用这样的东西之前,请仔细考虑!
除了调试之外,我认为没有理由尝试修改main.m文件以直接与应用程序逻辑交互。
如果适合您的需要,您可以尝试在Your_project_name_Prefix.pch文件中定义一个常量。或者在应用程序委托或应用程序的任何类上声明一个静态变量。
要了解有关常量和静态变量的更多信息,请访问以下链接:
http://iosdevelopertips.com/objective-c/java-developers-guide-to-static-variables-in-objective-c.html