检测处理器ArmV7与ArmV7s。 Objective-C的

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

我不确定这会提供您想要的信息,但我会尝试使用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 */ 

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

假设当且仅当处理器支持v7时才会使用v7s实现,它应该可以工作。

这条路:

 sysctlbyname("hw.cpusubtype", &value, &length, NULL, 0); 

很好,但有更简单的方法:

 #include  int processorType = _mh_execute_header.cputype; int processorSubtype = _mh_execute_header.cpusubtype; 

虽然,它显示了当前代码在编译时使用的cpu ..

你没有。

也就是说,不建议在iOS上以运行时编程方式检测ARM体系结构版本支持。 这是我从Apple工程师那里得到的答案,当我特意提出这个问题时,给出了陷阱(例如,当你得到意想不到的价值时你会做什么?),我可以相信它们。

(是的,有时候对“我怎么做?”问题的正确答案是“你没有。”)