1

在我的第一个ViewController ViewControllerTest1中,我有一个名为counter. counter应该在我的应用程序中不时增加。一切正常:

@implementation ViewControllerTest1{
int counter = 0;

-(void)viewDidLoad
{...}

-(void)method {...}
}

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

我知道我可以给它一个不同的名字,但为什么会这样呢?我可以确保只有处于ViewController活动状态的全局变量在我的记忆中吗?

或者我现在是否正在对全局变量做类似的事情counter?有更好的吗?

4

2 回答 2

3

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

您的声明应如下所示

static int counter = 0;

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

于 2013-03-08T17:31:34.480 回答
0

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

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

如果您有意在此文件之外访问此变量,因此需要保持extern链接,则需要将另一个变量命名为其他名称以区分两者。

于 2013-03-08T17:32:25.577 回答