objective-c-全局变量



如何在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

最新更新