【发布时间】:2011-03-18 13:12:59
【问题描述】:
在 OS X 和 iOS 中,Apple 使用 CGFloat typedef 在 32 位系统上自动获取 float,在 64 位系统上自动获取 double。但是当使用普通的 Unix 数学函数时,您需要根据具体情况做出决定。
例如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 位类型”警告。
或者也许是最好的策略,赌 64 位版本的 iOS 永远不会到来(或至少在足够近的将来)并使用 CGFloat 和 float-版本的 Unix 数学函数,而不是担心未来。
你使用什么策略?
【问题讨论】:
标签: ios objective-c iphone