问题:我想定义一个变量,范围是它所定义的类。既不是类的一个方法,也不是真正的全局变量。
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)+范围仅限于类?
答案 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