Rob*_*ger 10 cocoa types objective-c 32bit-64bit
我正在将应用程序转换为64位工作.Apple文档声明该CGFloat类型是float32位和double64位.
如果是这样,你如何处理值的编码/解码?例如,如果创建NSNumber从一个CGFloat,我应该使用-numberWithFloat:或-numberWithDouble:NSNumber的方法?同样的问题适用于NSCoder和NSKeyedArchiver方法-encodeFloat:forKey:和-encodeDouble:forKey:.
我是否必须编写一个条件宏,以便-numberWithFloat:在32位和-numberWithDouble:64位上调用?
如果运行64位版本应用程序的用户保存一个文件,其中这些值被编码为双精度并且文件在32位系统上打开/取消存档,会发生什么?
我的应用程序中使用的所有方法CGFloats都不太可能需要a的精度级别double,所以我是否应该担心这个?
Pet*_*sey 12
如果运行64位版本应用程序的用户保存一个文件,其中这些值被编码为双精度并且文件在32位系统上打开/取消存档,会发生什么?
没什么特别的.该文件包含一个double,并且可能是您要发送decodeDouble:forKey:以检索该值,因此您将获得一个double.然后你可以把它投射到CGFloat- 如果你在32位机器上会失去精确度,但你迟早要做那个演员.(即使你坚持使用double,CGFloat当你将值传递给Quartz/AppKit/UIKit时,你仍然需要强制转换.)
考虑替代方案:将floats 存储在64位计算机上的文件中,然后将文件重新加载到同一台计算机上.你和Quartz可以处理64位double类型的完整精度,但你没有它,因为你在写出文件时把它扔掉了.如果演员表中的值发生了变化,那么该变化现在是永久性的.
所以我的建议是始终使用double类型用的NSKeyedArchiver,除非你知道你从来没有打算使用任何东西,但float(即目标API只使用float,从来没有double).Quartz不是这样,因此CGFloat,使用double.
| 归档时间: |
|
| 查看次数: |
2983 次 |
| 最近记录: |