// 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关键字就会发生错误。
我很困惑,有人可以告诉我背后的概念吗? 谢谢!
答案 0 :(得分:5)
static
在Objective-C中与C中的含义完全相同 - 它具有内部链接和静态存储持续时间。在这种情况下,如果没有static
,则会收到错误,因为在源代码包含globalStr
的每个对象中都会有一个重复的符号ClassA.h
。你不是分享任何东西 - 你为每个编译单元获得globalStr
的新副本。
不要将对象定义放在标题中,你会更好。如果您想要一个全局字符串,则需要输入
extern NSString *globalStr;
在ClassA.h
中,并在正好一个实施文件中将其定义为:
NSString *globalStr = @"HelloWorld";