如何获取iOS设备的CPU类型?

17 浏览
0 Comments

如何获取iOS设备的CPU类型?

是否有办法在运行时识别iOS设备的CPU架构?

谢谢。

0
0 Comments

这段代码是用于获取iOS设备的CPU类型的。原作者提供了一个名为getCPUType的方法,该方法返回一个字符串,表示设备的CPU类型。方法中使用了sysctlbyname函数来获取CPU的类型和子类型,然后根据不同的类型和子类型,将对应的字符串追加到cpu字符串中,最后返回cpu字符串。

然而,代码中存在一个问题,即缺少对CPU_TYPE_ARM64类型的检查,只对CPU_TYPE_ARM类型进行了处理。这可能导致在将来的版本中,subtype的值可能发生变化,不再是V8,因此需要对CPU_TYPE_ARM64类型进行检查。

解决这个问题的方法很简单,只需在if语句中添加一个条件来检查CPU_TYPE_ARM64类型,然后再根据subtype的值进行相应的处理。以下是修改后的代码:

- (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);
    
    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"];
        
        if (subtype == CPU_SUBTYPE_ARM_V6) {
            [cpu appendString:@"V6"];
        } else if (subtype == CPU_SUBTYPE_ARM_V7) {
            [cpu appendString:@"V7"];
        } else if (subtype == CPU_SUBTYPE_ARM_V8) {
            [cpu appendString:@"V8"];
        }
        
    } else if (type == CPU_TYPE_ARM64) {
        [cpu appendString:@"ARM64"];
        
        if (subtype == CPU_SUBTYPE_ARM64_V8) {
            [cpu appendString:@"V8"];
        }
    }
    
    return cpu;
}

这样修改后的代码可以正确处理CPU_TYPE_ARM64类型,并根据subtype的值进行相应的处理。

希望这篇文章对你有所帮助!

0
0 Comments

如何获取iOS设备的CPU类型?

问题的原因是,开发者想要获取iOS设备的CPU类型。解决方法是使用sysctlbyname函数,并通过访问hw.cputype和hw.cpusubtype来获取CPU类型和子类型。代码中,通过判断type的值来确定CPU类型,然后根据不同的类型和子类型拼接出相应的字符串返回。对于iPhone 5s及其之后的设备,可以添加CPU_TYPE_ARM64作为新的类型和子类型。另外,还有一个问题是如何获取处理器的名称,可以使用sysctlbyname函数和"machdep.cpu.brand_string"参数来获取。

0
0 Comments

如何获取iOS设备的CPU类型?

在2020年,我认为以下是更好的方法:

import Darwin

import mach/mach.h>

import mach/mach_host.h>

var typeOfCpu: String = ""

var size: size_t = MemoryLayout<Int32>.size

var cpuType: Int32 = 0

var result: kern_return_t = sysctlbyname("hw.cputype", nil, &size, &cpuType, &size)

if result == KERN_SUCCESS {

switch cpuType {

case CPU_TYPE_ARM:

typeOfCpu = "ARM"

case CPU_TYPE_ARM64:

typeOfCpu = "ARM64"

default:

typeOfCpu = "Unknown"

}

} else {

typeOfCpu = "Unable to retrieve CPU type"

}

这段代码可以在Swift中将上述问题翻译成相应的代码。这是我认为在2020年最好的解决方法。谢谢 🙂

0