iOS:了解全局变量

时间:2013-03-08 17:28:08

标签: ios objective-c xcode variables global-variables

在我的第一个ViewController ViewControllerTest1中,我有一个名为counter的全局变量。 counter应该会在我的应用中不时增加。一切正常:

@implementation ViewControllerTest1{
int counter = 0;

-(void)viewDidLoad
{...}

-(void)method {...}
}

现在如果我在我的第二个counter ViewController XCode中声明另一个名为ViewControllerTest2的全局变量,则会给我一个错误。

我知道我可以给它一个不同的名字,但为什么会这样呢?我能确定只有活跃的某个ViewController的全局变量在我的记忆中吗?

或者我正在使用像counter这样的全局变量做一些不行的事情? 还有更好的东西吗?

2 个答案:

答案 0 :(得分:3)

如果您希望某个符号特定于某个文件,请在声明时使用static关键字。

您的声明应该是

static int counter = 0;

在链接时(在编译完所有文件之后),全局符号在同一文件中混合,因此,如果两个共享相同的名称,则链接器会触发错误。

答案 1 :(得分:0)

如果在文件范围定义变量(包括类定义中但位于ivar区域或方法体外的位置),默认情况下它将具有extern链接,这需要唯一的符号名称。

将其设为static变量(static int ...),问题将得到解决,因为静态符号名称只需要在声明它们的文件中是唯一的。

如果您故意访问此变量 此变量,因此需要维护extern链接,您需要将其他变量命名为其他变量以区分这两个变量。