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

Kor*_* Ou 0 linker static global-variables objective-c

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

@interface ClassA  
    ...  
@end

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

// in ClassB.m  
...  
NSLog(@"The global string: %@", globalStr);
...
Run Code Online (Sandbox Code Playgroud)

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

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

Car*_*rum 5

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

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

extern NSString *globalStr;
Run Code Online (Sandbox Code Playgroud)

ClassA.h,并在一个实现文件中定义它:

NSString *globalStr = @"HelloWorld";
Run Code Online (Sandbox Code Playgroud)