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

Bre*_*ett 2 cocoa static objective-c

在以下代码段中:

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

...

@end
Run Code Online (Sandbox Code Playgroud)

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

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

...

@end
Run Code Online (Sandbox Code Playgroud)

Jod*_*ins 7

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

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

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

  • @Brett NO.它们不是静态变量.第一个是外部可见变量的定义.第二个是静态变量,根据定义,它具有本地文件范围,并且不会发出链接器可见符号. (2认同)