在我的第一个ViewController
ViewControllerTest1
中,我有一个名为counter
的全局变量。
counter
应该会在我的应用中不时增加。一切正常:
@implementation ViewControllerTest1{
int counter = 0;
-(void)viewDidLoad
{...}
-(void)method {...}
}
现在如果我在我的第二个counter
ViewController
XCode中声明另一个名为ViewControllerTest2
的全局变量,则会给我一个错误。
我知道我可以给它一个不同的名字,但为什么会这样呢?我能确定只有活跃的某个ViewController
的全局变量在我的记忆中吗?
或者我正在使用像counter
这样的全局变量做一些不行的事情?
还有更好的东西吗?
答案 0 :(得分:3)
如果您希望某个符号特定于某个文件,请在声明时使用static
关键字。
您的声明应该是
static int counter = 0;
在链接时(在编译完所有文件之后),全局符号在同一文件中混合,因此,如果两个共享相同的名称,则链接器会触发错误。
答案 1 :(得分:0)
如果在文件范围定义变量(包括类定义中但位于ivar区域或方法体外的位置),默认情况下它将具有extern
链接,这需要唯一的符号名称。
将其设为static
变量(static int ...
),问题将得到解决,因为静态符号名称只需要在声明它们的文件中是唯一的。
如果您故意访问此变量 此变量,因此需要维护extern
链接,您需要将其他变量命名为其他变量以区分这两个变量。