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