我可以安全地使用CGFloat来保存Float64或Float32值吗?

时间:2010-05-02 12:51:24

标签: iphone c objective-c

我有一个CGFloat属性,有时我得到一个类型为Float64或类型为Float32的返回值。我可以安全地存储到CGFloat吗?

2 个答案:

答案 0 :(得分:2)

来自标题:

// CGBase.h
typedef float CGFloat;

// MacTypes.h
typedef float               Float32;
typedef double              Float64;

所以CGFloatFloat32都是float,而Float64double所以你会失去精确度。

(编辑以澄清:这适用于32位系统,例如iPhone。如果您构建的是64位,CGFloat被定义为double。)

答案 1 :(得分:1)

最佳做法是始终尝试将标量值存储为与收到它们相同的类型,因为标量类型的精度随硬件而变化。

在所有当前和未来的硬件上,并不总是保证CGFloat的大小相同。如果你用其他类型替换它或者用它来存储另一种类型,你的代码就会在某个地方出现问题。

当新的iPhone / iPad出现时,您可能会获得或失去精确度,或者如果您尝试将其移植到Mac,代码可能会中断。