在OS X和iOS中,Apple都使用CGFloat typedef在32位系統上自動獲取float
,在64位系統上自動獲取double
。但是當使用普通的Unix數學函數時,你需要根據具體情況做出決定。基於CGFloat的數學函數?
例如,floor()
函數被定義爲:
double floor(double x);
和floorf()
功能被定義爲:
float floorf(float x);
我知道所有iOS設備都是32位的今天,但使用CGFloat的原因是當第一個64位iOS設備(iPad 5?),而不必更改任何代碼。但要做到這一點,我們需要根據CGFloat的-數學函數:
CGFloat Floor(CGFloat x);
是否有像在iOS或任何第三方庫的任何功能?或者其他開發人員如何處理?我懷疑大多數人在iOS上使用CGFloat
以及float
-versions,但是如果編譯爲64位iOS設備(並處理代碼庫的兩個不同版本),則需要使用數學函數更改每一行)。
或者你可以只使用float
而不是CGFloat
,而不用擔心64位iOS。但是,那麼你會與Apple的庫和恕我直言的代碼不一致。
或者你也許可以使用CGFloat
加上double
-versions,只需要讓編譯器在double和float之間始終轉換的空間和性能。而不關心可能的「隱式轉換爲32位類型」警告。
或許是最好的策略,iOS上的沒有64位版本的賭注永遠不會到達(或至少在不久的將來不夠),並與Unix的數學函數float
-versions一起使用CGFloat
,而不是擔心未來。
您使用什麼策略?
謝謝!使用#include正是我想到的,它也是一個標準解決方案(C99的一部分)。顯然,「tg」在代表類型通用。如果你問我,蘋果應該在文檔中指出。 –
2011-03-18 14:09:32