Obj-C中的静态全局变量?

时间:2010-06-16 17:24:25

标签: objective-c static linker global-variables

// in ClassA.h  
static NSString *globalStr = @"HelloWorld";

@interface ClassA  
    ...  
@end

// in ClassB.h  
#include "ClassA.h"

// in ClassB.m  
...  
NSLog(@"The global string: %@", globalStr);
...

在C ++中,“static”应该表示变量或函数具有内部链接 但是在这种情况下它用于共享变量,没有static关键字就会发生错误。

我很困惑,有人可以告诉我背后的概念吗? 谢谢!

1 个答案:

答案 0 :(得分:5)

static在Objective-C中与C中的含义完全相同 - 它具有内部链接和静态存储持续时间。在这种情况下,如果没有static,则会收到错误,因为在源代码包含globalStr的每个对象中都会有一个重复的符号ClassA.h。你不是分享任何东西 - 你为每个编译单元获得globalStr的新副本。

不要将对象定义放在标题中,你会更好。如果您想要一个全局字符串,则需要输入

extern NSString *globalStr;

ClassA.h中,并在正好一个实施文件中将其定义为:

NSString *globalStr = @"HelloWorld";