2011-07-15 63 views
34

In Cocoa do you prefer NSInteger or just regular int, and why?,提到了NSDoubleNSFloat,但我看不到任何文檔中的參考文獻。如果NSInteger的目的是爲了建築安全,其他類型如doublefloat是否存在NSDouble,NSFloat或除NSInteger之外的其他類型?

+1

我不確定OP在說什麼。那些不存在。 – BoltClock

+0

那麼雙重和浮動是建築安全嗎?我可以使用double,但是當它來到int時,我需要使用NSInteger,就像那樣? – sarunw

+3

我不認爲* NSFloat *,* NSDouble *存在。但是,我知道CGFloat存在(不在問題的上下文中,呵呵) – EmptyStack

回答

79

NSInteger存在,因爲int類型在32位和64位系統之間大小不同。 floatdouble的尺寸沒有相同的變化,所以不需要爲它們設置包裝類型。

+0

那麼如果我想向NSArray添加一個double,該怎麼辦?它只接受對象。 –

+6

將它包裝在一個NSNumber對象(它是更一般的NSValue的子類)中。 – duskwuff

+11

好吧,有'CGFloat',它是32位'float'和64位'double'的'typedef'。這與'NS(U)Integer'所做的相當,我會說。 – Regexident

5

沒有NSFloat但我知道核心圖形API最終從float更改爲CGFloat,因此它可以在某些體系結構上使用double

最好使用API​​標頭聲明的確切類型。如果您爲不同目標重新編譯代碼,這會使類型更改自動進行。

0

這也是約定。

int的typedef與int int本身不兼容。

示例:pid_t的類型爲int,但傳遞一個int將創建警告。

爲什麼?因爲你想確定如果你跨越API邊界,每個人都知道代碼的期望。

有浮動和雙重類型,即NSTimeInterval。這不是真正的基礎類型,而是遵循的慣例。

如果您將本地int聲明爲循環計數器,並且您不打算將它傳遞給定義良好的API,則可以將int作爲int來調用。

相關問題