我有一个CGFloat属性,有时我得到一个类型为Float64或类型为Float32的返回值。我可以安全地存储到CGFloat吗?
答案 0 :(得分:2)
来自标题:
// CGBase.h
typedef float CGFloat;
// MacTypes.h
typedef float Float32;
typedef double Float64;
所以CGFloat
和Float32
都是float
,而Float64
是double
所以你会失去精确度。
(编辑以澄清:这适用于32位系统,例如iPhone。如果您构建的是64位,CGFloat
被定义为double
。)
答案 1 :(得分:1)
最佳做法是始终尝试将标量值存储为与收到它们相同的类型,因为标量类型的精度随硬件而变化。
在所有当前和未来的硬件上,并不总是保证CGFloat的大小相同。如果你用其他类型替换它或者用它来存储另一种类型,你的代码就会在某个地方出现问题。
当新的iPhone / iPad出现时,您可能会获得或失去精确度,或者如果您尝试将其移植到Mac,代码可能会中断。