将变量放在objective-c中的实现中

时间:2012-09-09 20:07:12

标签: objective-c cocoa static

在以下代码段中:

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

...

@end

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

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

...

@end

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

据我了解,根据定义,在方法之外定义的所有变量都是全局变量。它们与大多数语言中的全局变量相同。它们不是隐式静态的(AFAIK),但可以明确地这样做。 我不认为你的两个例子之间存在差异,但我可能错了。我没注意到你让第二个例子明确地是静态的。最上面的是全局的,最下面的是全局的和静态的(文件范围)。