Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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设备CPU体系结构_Ios_Objective C_Cpu Architecture - Fatal编程技术网

如何在运行时获得iOS设备CPU体系结构

如何在运行时获得iOS设备CPU体系结构,ios,objective-c,cpu-architecture,Ios,Objective C,Cpu Architecture,有没有办法在运行时确定iOS设备CPU体系结构 谢谢。您可以使用sysctlbyname: #include <sys/types.h> #include <sys/sysctl.h> #include <mach/machine.h> NSString *getCPUType(void) { NSMutableString *cpu = [[NSMutableString alloc] init]; size_t size; cpu

有没有办法在运行时确定iOS设备CPU体系结构


谢谢。

您可以使用sysctlbyname:

#include <sys/types.h>
#include <sys/sysctl.h>
#include <mach/machine.h>

NSString *getCPUType(void)
{
    NSMutableString *cpu = [[NSMutableString alloc] init];
    size_t size;
    cpu_type_t type;
    cpu_subtype_t subtype;
    size = sizeof(type);
    sysctlbyname("hw.cputype", &type, &size, NULL, 0);

    size = sizeof(subtype);
    sysctlbyname("hw.cpusubtype", &subtype, &size, NULL, 0);

    // values for cputype and cpusubtype defined in mach/machine.h
    if (type == CPU_TYPE_X86)
    {
            [cpu appendString:@"x86 "];
             // check for subtype ...

    } else if (type == CPU_TYPE_ARM)
    {
            [cpu appendString:@"ARM"];
            switch(subtype)
            {
                    case CPU_SUBTYPE_ARM_V7:
                    [cpu appendString:@"V7"];
                    break;
                    // ...
            }
    }
    return [cpu autorelease];
}
#包括
#包括
#包括
NSString*getCPUType(无效)
{
NSMutableString*cpu=[[NSMutableString alloc]init];
大小;
cpu类型\u t类型;
cpu_子类型_t子类型;
尺寸=尺寸(类型);
sysctlbyname(“hw.cputype”、&type、&size,NULL,0);
大小=sizeof(子类型);
sysctlbyname(“hw.cpusubtype”,&子类型,&大小,NULL,0);
//在马赫/机器.h中定义的cputype和cpusubtype的值
if(type==CPU\u type\u X86)
{
[cpu appendString:@“x86”];
//检查子类型。。。
}else if(type==CPU\u type\u ARM)
{
[cpu appendString:@“ARM”];
开关(子类型)
{
案例CPU_子类型_臂_V7:
[cpu appendString:@“V7”];
打破
// ...
}
}
返回[cpu自动释放];
}

只是在@Emmanuel的答案中添加了更多内容:

- (NSString *)getCPUType {
      NSMutableString *cpu = [[NSMutableString alloc] init];
      size_t size;
      cpu_type_t type;
      cpu_subtype_t subtype;
      size = sizeof(type);
      sysctlbyname("hw.cputype", &type, &size, NULL, 0);

      size = sizeof(subtype);
      sysctlbyname("hw.cpusubtype", &subtype, &size, NULL, 0);

      // values for cputype and cpusubtype defined in mach/machine.h
      if (type == CPU_TYPE_X86_64) {
          [cpu appendString:@"x86_64"];
      } else if (type == CPU_TYPE_X86) {
          [cpu appendString:@"x86"];
      } else if (type == CPU_TYPE_ARM) {
          [cpu appendString:@"ARM"];
          switch(subtype)
          {
              case CPU_SUBTYPE_ARM_V6:
                  [cpu appendString:@"V6"];
                  break;
              case CPU_SUBTYPE_ARM_V7:
                  [cpu appendString:@"V7"];
                  break;
              case CPU_SUBTYPE_ARM_V8:
                  [cpu appendString:@"V8"];
                  break;
          }
      }
      return cpu; 
  }

我认为这是更好的方式

#import <mach-o/arch.h>

NXArchInfo *info = NXGetLocalArchInfo();
NSString *typeOfCpu = [NSString stringWithUTF8String:info->description];
//typeOfCpu = "arm64 v8"
#导入
nxarcinfo*info=NXGetLocalArchInfo();
NSString*typeOfCpu=[NSString stringWithUTF8String:info->description];
//typeOfCpu=“arm64 v8”

以下是@Mahmut答案的快速版本

importmacho
私有函数getArchitecture()->NSString{
let info=NXGetLocalArchInfo()
返回NSString(utf8String:(信息?.pointee.description)!)!
}
打印(getArchitecture()??“未找到架构”)
结果
  • iPhone 12:
    ARM64E
  • Mac迷你M1
    • iOS 13仿真器:
      Intel 80486
    • iOS 14模拟器:
      ARM64E
  • MacBook Pro 16英寸x86_64英特尔:
    • iOS 13模拟器:``(我没有在这里下载模拟器)
    • iOS 14仿真器:
      Intel x86-64h Haswell

请随时更新。

尝试为设备型号设置定义:谢谢,但我想我不清楚,或者可能我误导了这个问题,只要它检测到型号就可以了,我怎么才能得到它是ARMv6、ARM、ARMv7、i386?嗯,我想我明白你的意思,我应该得到型号并设置定义,因为型号可以找到架构。For iPhone 5s设备或更高版本,大多数设备支持64位,我们可以添加CPU_TYPE_ARM64作为类型和子类型的新案例。@Emmanuel谢谢你的回答。但我想知道我们是否可以使用sysctlbyname和“machdep.CPU.brand_字符串”来获得处理器的名称,如“英特尔i5”@VikasBansal Hi“应该给你想要的。谢谢您的答案是缺少CPU\u类型\u ARM64类型检查,然后是CPU\u子类型\u ARM64\u V8的子类型检查(目前它将始终是V8,但将来可能会更改)如何在swift中转换此内容?对我来说非常适合(我认为这是2020年的最佳解决方案…)。谢谢:)