正如其他人所说,CGFloat 在32位系统上是浮点数,在64位系统上是浮点数。然而,这样做的决定是从 OS X 继承而来的,它是基于早期 PowerPC CPU 的性能特征做出的。换句话说,您不应该认为 float 适用于32位 CPU,double 适用于64位 CPU。(我相信,早在64位处理器出现之前,苹果的 ARM 处理器就已经能够处理双倍处理了。)
使用双精度浮点运算对性能的主要影响是它们使用了两倍的内存,因此如果要执行大量的浮点运算,速度可能会更慢。
public struct CGFloat {
#if arch(i386) || arch(arm)
/// The native type used to store the CGFloat, which is Float on
/// 32-bit architectures and Double on 64-bit architectures.
public typealias NativeType = Float
#elseif arch(x86_64) || arch(arm64)
/// The native type used to store the CGFloat, which is Float on
/// 32-bit architectures and Double on 64-bit architectures.
public typealias NativeType = Double
#endif
public struct CGFloat {
/// The native type used to store the CGFloat, which is Float on
/// 32-bit architectures and Double on 64-bit architectures.
public typealias NativeType = Double