Objective-C:将变量的范围限制为类

时间:2015-08-28 10:09:20

标签: objective-c scope

问题:我想定义一个变量,范围是它所定义的类。既不是类的一个方法,也不是真正的全局变量。

Idee:我试图在类的实现块中定义变量,但在任何方法之外。像这样:

@implementation DBManager
BOOL const gCommentsOnOff = YES; // to switch-on the comments in all methods
...
@end

我想,这个变量对于班级是私有的。但是,如果我在第二个类中使用相同的定义,我会得到以下编译器错误:

duplicate symbol _gCommentsOnOff in:
    ...
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

显然,该变量不是该类的私有。

问题:如何定义布尔变量(值为YES)+范围仅限于类?

2 个答案:

答案 0 :(得分:1)

据我了解,您希望在类中定义静态变量,而不是在整个项目中定义静态变量。如果是,那么您可以在@implementation之前的 .m 文件中声明这样的变量:

static const BOOL gCommentsOnOff = YES;

目前它在您的应用中抱怨,因为您可能在具有相同名称的不同类 .h 文件中声明了静态/外部变量。

如果你想声明实例变量,那么你可以这样做:

@implementation DGManager {
    BOOL gCommentsOnOff;
}

- (id)init {
    self = [super init];
    if (self) {
        gCommentsOnOff = YES;
    }
}

答案 1 :(得分:0)

您不能在Objective-C中将范围限制为类级别,而是必须像您一样声明一个全局变量,但将其范围限制为实现文件(.m)使用static。如果在此实现文件中没有定义其他类(它们通常不是),这将执行您想要的操作。

同样将声明放在@implementation部分内也无效。

static const BOOL gCommentsOnOff = YES; 

@implementation DBManager
...
@end