Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift中是否有API来确定iOS设备的处理器寄存器大小?_Ios_Swift_Uidevice - Fatal编程技术网

Swift中是否有API来确定iOS设备的处理器寄存器大小?

Swift中是否有API来确定iOS设备的处理器寄存器大小?,ios,swift,uidevice,Ios,Swift,Uidevice,我向用户显示他们的设备是32位还是64位。目前,我根据UInt.max的值确定: let cpuRegisterSize = count(String(UInt.max, radix: 2)) 它感觉有点粗糙,所以我想知道Swift中是否有一个API返回该值。据我所知,UIDevice似乎没有保存这些信息。在32位设备上CGFloat是Float。在64位设备上,CGFloat是双精度的。因此,您可以使用CGFLOAT\u IS\u DOUBLE来检测当前架构 let bit = 32 * (

我向用户显示他们的设备是32位还是64位。目前,我根据UInt.max的值确定:

let cpuRegisterSize = count(String(UInt.max, radix: 2))

它感觉有点粗糙,所以我想知道Swift中是否有一个API返回该值。据我所知,UIDevice似乎没有保存这些信息。

在32位设备上
CGFloat
是Float。在64位设备上,
CGFloat
是双精度的。因此,您可以使用
CGFLOAT\u IS\u DOUBLE
来检测当前架构

let bit = 32 * (CGFLOAT_IS_DOUBLE + 1)
您还可以使用
sizeof(Int)

MemoryLayout.size==MemoryLayout.size?32 : 64

这将检查应用程序是以32位还是64位模式编译的。64位设备可以运行32位代码。64位iOS设备对于提交到app store的任何内容都需要64位代码,并将在64位设备上运行该代码,因此,如果新编写的32位代码正在设备上运行,则该设备为32位。除了“UInt的大小是多少”之外,可能没有其他测试“如果设备是其中之一,我知道它是32位的,那么它是32位的;否则是64“。或者像不要为ARMv7s构建和时间整数除法之类的真正骇人的东西,这是任何理智的人都不会实现的。幸运的是,我猜那些关心的少数用户可能足够专业,可以原谅edge case的错误结果。您想检查设备是否有64位处理器,或者应用程序是否以64位模式运行吗?这是不同的问题。比较,这是(Objective-)C的同一个问题,对这两个问题都有答案。我正在执行一些位操作,并在执行之前检查结果是否会导致溢出。所以我想UInt的大小,由平台决定,才是最重要的。谢谢你的链接,马丁。这在我在这里和谷歌的搜索中没有出现。当然,现在这无关紧要了——苹果已经表示,他们可能会在iOS 11中放弃对32位应用程序的所有支持。这看起来应该会起作用,但对未来来说(因为你是这个网站的新手)您应该尝试备份您在答案中发布的代码,并解释其工作原理。至少在这种情况下,这是不言自明的,但你仍然应该尝试至少发布一两句话。或者让size=MemoryLayout.size*8当然,这仍然很重要——苹果仍然在销售32位设备,即苹果手表。更不用说其他架构了,比如Raspi。
let bit = sizeof(Int) == sizeof(Int64) ? 64 : 32
MemoryLayout<Int>.size == MemoryLayout<Int32>.size ? 32 : 64