2015-07-10 51 views
0

我想要一個像Java一樣的靜態布爾值。這個布爾值只爲整個類創建一次,無論它有多少實例。Objective C - 安全地創建一個靜態布爾值?

我在這裏看了一些帖子。他們中的一些提示在.m file,初始化這個變量像

static BOOL myBool = NO; 

,然後有一個getter和setter函數。但是我被告知這在Objective C中不安全和乾淨。一個更安全,更乾淨的方法是使用init靜態變量。但如果我初始化它的功能,如

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

這樣myBool將永遠不會。如果我想在之後設置此布爾值,該怎麼辦?如果我再次調用static BOOL myBool,它會給我相同的布爾值嗎?

+0

「這樣myBool將永遠不會。」 - 你似乎錯過了「靜態」這一點。 –

+0

「我被告知...」誰?在什麼情況下? – Eiko

+1

原始碼絕對沒問題。誰告訴你這不安全,乾淨就會面臨一些面向對象的疾病。 – gnasher729

回答

0

試試這個

+(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)]; 
+3

'bool'是C和C++中的一個類型名,不要用它作爲變量名。 –

+0

@TheParamagneticCroissant你是對的。謝謝。 – katie

+0

這會起作用,但我沒有看到這一點,除非你真的想從編譯單元外部訪問該BOOL。 – bbum

2

Objective-C中的全局靜態變量本質上沒有「不安全和乾淨」它們通常在適當的時候使用 - 它們實際上是Objective-C的類變量。

請參閱Setting Static Variables in Objective-C以瞭解您提及的getter和setter函數的一種寫法。