2011-08-20 63 views
2

我有一個簡單的問題,關於是否在目標語句 - C.這是否說明正確,還是冗餘?

這是if語句正確,還是它是多餘的,我不需要指定== YES?

NSNumber *boolean = [NSNumber numberWithBool:YES]; 
if (boolean == YES) ... 

感謝

回答

5

你比較指針和整數,這不會導致你想要的結果。

例子:

NSNumber *boolean1 = [NSNumber numberWithBool:YES]; 
if (boolean1) { 
    // true 
} 

NSNumber *boolean2 = [NSNumber numberWithBool:NO]; 
if (boolean2) { 
    // this is also true 
} 

if ([boolean1 boolValue] && ![boolean2 boolValue]) { 
    // true 
} 
2

不,這是不正確的,它不會產生你認爲它是輸出。 NSNumber * boolean是一個指向內存中對象的指針,而YES是一個標量值;他們不應該與==進行比較。

如果您鍵入此代碼,你還可以得到以下警告:

warning from comparison

做正確的方式,它是:

NSNumber *boolean = [NSNumber numberWithBool:YES]; 
if ([boolean boolValue]) { 
    // do something 
} 

但這句話本身並不能使很有道理,因爲你應該比較BOOL而不是NSNumber - 在這裏不需要使用NSNumber

0

這是行不通的。 NSBoolean的一個實例是一個對象,並且不管是YES還是NO都是非NULL。

有兩種好方法可以檢查NSBoolean的值。

的第一種是使用boolValue

NSNumber *boolean = [NSNumber numberWithBool:YES]; 
if ([boolean boolValue] == YES) ... 
if ([boolean boolValue]) ... // simpler 

第二種是使用對象的標識返回:

NSNumber *boolean = [NSNumber numberWithBool:YES]; 
if (boolean == (id)kCFBooleanTrue) ... 

後者是快;它依賴於系統上只有一個NSBoolean YESNSBoolean NO。這些值與kCFBooleanTruekCFBooleanFalse的值相同。我讀過這篇文章是永遠安全的,但我不確定它是否是Apple發佈的文檔的一部分。