Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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
Ios 检测处理器ArmV7与ArmV7s。目标-C_Ios_Objective C - Fatal编程技术网

Ios 检测处理器ArmV7与ArmV7s。目标-C

Ios 检测处理器ArmV7与ArmV7s。目标-C,ios,objective-c,Ios,Objective C,在iOS中是否可以检测设备的当前处理器。 我正在处理的项目需要以编程方式检查处理器是ArmV7还是ArmV7s。我不知道有任何API可以检查这一点,但是您可以自己编写一个,为相同的符号提供v7和v7s汇编程序实现,只需根据需要返回true或false即可 假设v7s实现将在且仅在处理器支持v7s的情况下使用,它应该可以工作。我不确定这是否会提供您想要的信息,但我会尝试sysctl: int32_t value = 0; size_t length = sizeof(value); sysctlb

在iOS中是否可以检测设备的当前处理器。
我正在处理的项目需要以编程方式检查处理器是ArmV7还是ArmV7s。

我不知道有任何API可以检查这一点,但是您可以自己编写一个,为相同的符号提供v7和v7s汇编程序实现,只需根据需要返回true或false即可


假设v7s实现将在且仅在处理器支持v7s的情况下使用,它应该可以工作。

我不确定这是否会提供您想要的信息,但我会尝试
sysctl

int32_t value = 0;
size_t length = sizeof(value);
sysctlbyname("hw.cpusubtype", &value, &length, NULL, 0);
子类型的值在
mach/machine.h

/*
 *  ARM subtypes
 */
#define CPU_SUBTYPE_ARM_ALL             ((cpu_subtype_t) 0)
#define CPU_SUBTYPE_ARM_V4T             ((cpu_subtype_t) 5)
#define CPU_SUBTYPE_ARM_V6              ((cpu_subtype_t) 6)
#define CPU_SUBTYPE_ARM_V5TEJ           ((cpu_subtype_t) 7)
#define CPU_SUBTYPE_ARM_XSCALE      ((cpu_subtype_t) 8)
#define CPU_SUBTYPE_ARM_V7      ((cpu_subtype_t) 9)
#define CPU_SUBTYPE_ARM_V7F     ((cpu_subtype_t) 10) /* Cortex A9 */
#define CPU_SUBTYPE_ARM_V7K     ((cpu_subtype_t) 12) /* Kirkwood40 */
这样:

sysctlbyname("hw.cpusubtype", &value, &length, NULL, 0);
这很好,但还有更简单的方法:

#include <mach-o/ldsyms.h>

int processorType = _mh_execute_header.cputype;
int processorSubtype = _mh_execute_header.cpusubtype;
#包括
int processorType=\u mh\u execute\u header.cputype;
int processorSubtype=\u mh\u execute\u header.cpusubtype;
尽管如此,它显示了当前代码在编译时使用的cpu。

您没有

也就是说,不建议在iOS上运行时以编程方式检测ARM体系结构版本支持。这是我从一位苹果工程师那里得到的答案,当我特别问这个问题时,考虑到陷阱(例如,当你得到一个意想不到的值时,你会怎么做?),我可以相信他们


(是的,有时“我该怎么做?”问题的正确答案是“你不需要”。

你检查过这个@BuntyMadan:这个答案显示了如何找到编译可执行或共享库的体系结构,而不是当前的处理器体系结构。是的,谢谢您的建议,但这需要动态检测。@MartinR没错。请检查mach/machine.h以获取cpu子类型值。有趣的问题1:当
sysctlbyname(“hw.cpusubtype”,…)
给您一个意外值时,您的代码会做什么?有趣的问题2:当你的应用程序在你的应用程序发布后的设备上运行时,你认为会发生什么?总结。除了
将包含一个对应于未知处理器子类型的数字之外,没有问题。没有问题?!!这是您的问题:给定一个未知值,您要么决定这意味着处理器支持ARMv7s,如果苹果推出的新处理器不一定支持其最新处理器的所有功能,您就有崩溃的风险,要么决定这意味着处理器不支持ARMv7s,在这种情况下,您可能会在新引入的支持它的设备上出现性能更差的风险。在你说你在任何一种情况下都会反应迅速之前,想象一下一个欧洲开发人员按照你的建议,在一台新设备上出现了问题,而这只是我们最初几个月的问题……我的回答回答了OP的问题,即如何识别设备的当前处理器。在某些情况下,这是否是一种良好做法是一个不适合评论的讨论。