在以下代码段中:
@implementation Foo
NSString* bar = @"Some text.";
...
@end
bar
是静态变量,还是某种类或实例变量?具体来说,它与执行以下操作有何不同:
static NSString* bar = @"Some text.";
@implementation Foo
...
@end
答案 0 :(得分:7)
在第一个示例中,bar
是一个全局变量,具有对外界的全局链接器可见性。
在第二个示例中,bar
是一个静态变量,只具有本地文件可见性(即符号在当前编译单元外部不可见)。
对于这两个示例,它们相对于Objective-C关键字@implementation
的定位无关紧要。它们与Objective-C类完全无关,无论是在@implementation
范围之内还是之外都是相同的。
答案 1 :(得分:0)
据我了解,根据定义,在方法之外定义的所有变量都是全局变量。它们与大多数语言中的全局变量相同。它们不是隐式静态的(AFAIK),但可以明确地这样做。 我不认为你的两个例子之间存在差异,但我可能错了。我没注意到你让第二个例子明确地是静态的。最上面的是全局的,最下面的是全局的和静态的(文件范围)。