2

在以下代码段中:

@implementation Foo
NSString* bar = @"Some text.";

...

@end

bar静态变量,还是某种类或实例变量?具体来说,它与执行以下操作有何不同:

static NSString* bar = @"Some text.";
@implementation Foo

...

@end
4

2 回答 2

7

在第一个示例中,bar是一个全局变量,具有对外部世界的全局链接器可见性。

在第二个示例中,bar是一个静态变量,仅具有本地文件可见性(即,该符号在当前编译单元之外不可见)。

对于这两个示例,它们相对于 Objective-C 关键字的定位@implementation是无关紧要的。它们与 Objective-C 类完全没有关系,无论在范围内还是@implementation范围外,它们的操作都是一样的。

于 2012-09-09T20:13:57.893 回答
0

据我了解,在方法之外定义的所有变量都是全局定义的。它们与大多数语言中的全局变量相同。它们不是隐式静态的(AFAIK),但可以明确地这样做。我认为您的两个示例之间没有区别,但我可能错了。我没有注意到您将第二个示例明确设为静态。顶部是全局的,底部是全局的和静态的(文件范围)。

于 2012-09-09T20:18:16.517 回答