我在哪里声明静态变量?

时间:2009-11-02 18:39:47

标签: iphone objective-c cocoa-touch

即。我想把这个带到我的代码中:

static BOOL MyConstantBool = YES;

必须在@implementation之前或之后吗?是否有规则放置它?它还可以进入头文件吗?

3 个答案:

答案 0 :(得分:10)

如果你想定义一个全局变量,你把它放在哪里(@implementation的内部或外部)并不重要。在此上下文中,static表示该变量仅在此编译单元(.m文件)中可见。

还有一些静态变量,它们在函数中定义。它们像全局变量一样工作,但仅在函数范围内可见。

答案 1 :(得分:1)

如果它在@implementation块之后,则不能在@implementation块中使用它(除非它已使用extern在其他地方向前声明)。我是这样做的:

//Constants.h
extern BOOL MyConstantBool;
extern NSString* MyConstantString;


//Constants.m
#import "Constants.h"
BOOL MyConstantBool = YES;
NSString* MyConstantString = @"Hello, world!";


//SomeOtherFile.m
#import "Constants.h" 
//you can now use anything declared in Constants.h 

答案 2 :(得分:0)

全球各地随处可见;把它放在任何风格上有意义的地方。我更喜欢亲眼看到源文件顶部附近的全局变量。

虽然您可以将定义放入头文件中,但我不推荐它。在头文件中放置任何类型的定义都可能导致多重定义的符号链接器错误。如果您需要多个编译单元来查看变量,那么无论如何都不能使它static - 您需要在某个实现文件中定义它并使用extern使其可见各种源文件。