2011-03-04 16 views
2

所以我有下面的代碼,我想知道在objective-c中哪個被認爲是更好的「風格」。Objective-C造型

選項1:

id temp = [dictionary objectForKey: @"aBooleanValue"]; 
BOOL var = (temp) ? [ temp intValue ] : NO; 

選項2:

BOOL var = ([dictionary objectForKey: @"aBooleanValue"]) ? [[dictionary objectForKey: @"aBooleanValue"] intValue ] : NO; 

我相信性能也比較類似,因爲包含HashMap具有恆定的查找時間。如果不再使用temp變量,是否值得?

+3

只是一個無關的註釋:如果可能的話,你應該使用'[whatever boolValue]',而不是'[不管intValue]'。 – 2011-03-04 16:06:28

+2

有什麼問題:'BOOL var = [[dictionary objectForKey:@「aBooleanValue」] boolValue];'?? – Jasarien 2011-03-04 16:10:13

+0

除了Jonathan Sterling:以及如果你想要的整數值。您應該使用integerValue並使用NSInteger而不是int和intValue。 – V1ru8 2011-03-04 16:10:56

回答

3

兩個選項都是有效的,兩者都不一定「好」;這只是一個偏好問題。

但是,從我所知道的,有一種方法可以將代碼縮短到根本不需要變量或三元運算符的點。
如果從[dictionary objectForKey:@"aBooleanValue"]返回的對象是NSNumberNSValue(我假設它是),則可以通過簡單地調用BOOL var = [[dictionary objectForKey:@"aBooleanValue"] boolValue]並完成它來完全避免該問題。

+0

aBooleanValue是新添加的,因此對於不包含此鍵的值的字典(或文件)應該具有向後兼容性。我不相信我可以在nil上調用boolValue ... – 2011-03-04 17:07:35

+1

@ jp.rider63你絕對可以在'nil'上調用'boolValue';在'nil'上調用方法在Objective-C中是一個大問題(你一定要檢查這個話題!)。在這種情況下,在'nil'上調用'boolValue'將返回'NO'。 – 2011-03-04 17:20:06

+0

有趣的是,我一直認爲nil被定義爲0.我認爲這將是最好的解決方案然後(對不起V1ru8)。我還閱讀了[鏈接](http://unixjunkie.blogspot.com/2006/02/messaging-nil-in-objective-c.html)瞭解更多背景信息。 – 2011-03-04 17:57:10

3

Itai Ferber的解決方案boolValue聽起來像是一個很好的解決方案。但絕對不要使用選項2.它工作正確,但它會給你任何人都不想讀的雜亂和醜陋的代碼。選項1看起來更清晰,可以更好地閱讀。 大部分時間你做的東西使代碼更清晰。就像添加一個tmp var是由編譯器優化的一樣,所以它沒有什麼區別。