Objective c 目标C-安全创建静态布尔值?

Objective c 目标C-安全创建静态布尔值?,objective-c,boolean,Objective C,Boolean,我想要一个类似Java的静态布尔值。这个布尔值只为整个类创建一次,不管它有多少个实例 我在这里读了一些帖子。他们中的一些人建议在.m文件中 static BOOL myBool = NO; 然后有一个getter和setter函数。但有人告诉我,在目标C中这是不安全和干净的。更安全和干净的方法是在函数中初始化静态变量。但如果我在函数中初始化它,比如 +(Bool)getMyBool { static BOOL myBool = NO; return myBool; } 这样,

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

我在这里读了一些帖子。他们中的一些人建议在
.m文件中

static BOOL myBool = NO;
然后有一个getter和setter函数。但有人告诉我,在目标C中这是不安全和干净的。更安全和干净的方法是在函数中初始化静态变量。但如果我在函数中初始化它,比如

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

这样,myBool将始终为否。如果我以后要设置此布尔值,该怎么办?如果我再次调用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)];
如果您只想获取该静态布尔值,请调用

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

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


有关编写您提到的getter和setter函数的一种方法,请参阅。

“以这种方式,myBool将永远不会”–您似乎错过了
静态的要点。
“谁告诉我…”?在什么情况下?原始代码绝对是好的。无论谁告诉你它不安全和干净,都会受到一些面向对象的疾病的困扰。<代码> Boo.<代码>是C和C++中的一个类型名称,不要用它作为变量名。这是有效的,但是我不明白这一点,除非你真的想从编译单元外部访问那个BoL。