我转换一个应用程序以64位的工作。苹果文档状态下CGFloat类型是32位的一个float和在64位一double

如果是这样的话,你如何处理的值的编码/解码?举例来说,如果从NSNumber创建CGFloat,我应该使用的NSNumber的-numberWithFloat:-numberWithDouble:方法?同样的问题适用于NSCoderNSKeyedArchiver方法-encodeFloat:forKey:-encodeDouble:forKey:

我必须写一个条件宏使得-numberWithFloat:被称为在32位和-numberWithDouble:在64位?

如果运行该应用程序的64位版本的一个用户保存,其中这些值被编码为一个双打文件和文件打开/未归档在32位的系统上?,会发生什么

在我的应用程序使用CGFloats

所有方法都是不可能永远需要一个double的精度水平,所以我应该甚至担心这个?

有帮助吗?

解决方案

  

如果运行该应用程序的64位版本的一个用户保存,其中这些值被编码为一个双打文件和文件打开/未归档在32位的系统上?,会发生什么

没有什么特别的。该文件包含一个double,想必你发送decodeDouble:forKey:检索值,所以你会得到一个double。然后,您可以将它转换到CGFloat,其中,如果你是一个32位的机器上会失去精度,但你必须这样做投迟早的事。 (即使你不放double,你还是要投当你通过价值石英/ AppKit的/ UIKit的到CGFloat。)

考虑替代:您存储floats在64位机器上的文件中,然后加载文件备份在同一台机器上。你和石英可以处理64位double型的全精度,但你没有拥有它,因为你把它扔了,当你写出来的文件。如果该值在铸造变化在所有的,即改变现在是永久的。

所以我的建议是始终使用double类型与的NSKeyedArchiver,除非你知道你的从不的打算使用任何东西,但float(即目标API只使用float,从来没有double)。这不是石英的真,所以对于CGFloat,使用double

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top