如何获取iOS设备的CPU类型?
这段代码是用于获取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的值进行相应的处理。
希望这篇文章对你有所帮助!
如何获取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年最好的解决方法。谢谢 🙂