Objective C - 安全地创建静态布尔值?

Objective C - Safely create a static Boolean?

我想要像 Java 中那样的静态布尔值。这个布尔值只为整个 class 创建一次,不管它有多少个实例。

我在这里看了一些帖子。他们中的一些人建议在 .m file 中像

一样初始化这个变量
static BOOL myBool = NO;

然后有一个getter和一个setter函数。但有人告诉我,这在 Objective C 中并不安全和干净。一种更安全、更简洁的方法是在函数中初始化静态变量。但是如果我在一个函数中初始化它,比如

+(Bool)getMyBool {
    static BOOL myBool = NO;
    return myBool;
}

这样myBool就永远NO了。如果我想在之后设置这个布尔值怎么办?如果我再次调用 static BOOL myBool,它会给我相同的布尔值吗?

试试这个

+(BOOL)resetBoolOrGet:(BOOL)reset newVal:(BOOL)newValue {
    static BOOL myBool = NO;
    if (reset) {
        myBool = newValue;
    }
    return myBool;
}

因此,如果您想为这个布尔值分配一个新值,请调用

[MyClass resetBoolOrGet:YES newVal:newValue];

如果您只想获取该静态布尔值,请调用

[MyClass resetBoolOrGet:NO newVal:(either YES or NO)];

Objective-C 中的全局静态变量并没有内在的“不安全和不干净”,它们通常在适当的时候使用——它们实际上是 Objective-C 的 class 变量.

有关编写您提到的 getter 和 setter 函数的一种方法,请参阅 Setting Static Variables in Objective-C