IOS 特定于设备的开发:获取额外的设备信息

时间:2022-10-29 20:45:05

sysctl()和sysctlbyname()允许获取系统信息。这些标准的UNIX函数用于询问操作系统有关硬件和OS的详细信息。

这些常量使你能够检查核心信息,比如系统的CPU频率,可用的内存量等。它引入了一个UIDevice类,用于搜集系统信息,并通过一系列方法调用返回它。

每个型号都提供了独特的内置能力,准确知道你正在处理哪款iPhone有助于确定那个单元是否有可能支持诸如可访问性,GPS和磁力计之类的特性。

#pragma mark sysctlbyname utils
- (NSString *) getSysInfoByName:(char *)typeSpecifier
{
size_t size;
sysctlbyname(typeSpecifier, NULL, &size, NULL, ); char *answer = malloc(size);
sysctlbyname(typeSpecifier, answer, &size, NULL, ); NSString *results = [NSString stringWithCString:answer encoding: NSUTF8StringEncoding]; free(answer);
return results;
} - (NSString *) platform
{
return [self getSysInfoByName:"hw.machine"];
} // Thanks, Tom Harrington (Atomicbird)
- (NSString *) hwmodel
{
return [self getSysInfoByName:"hw.model"];
}

返回的是:

-- ::40.391 HelloWorld[:] Platform: iPhone5,
-- ::40.393 HelloWorld[:] HWModel: N49AP
#pragma mark sysctl utils
- (NSUInteger) getSysInfo: (uint) typeSpecifier
{
size_t size = sizeof(int);
int results;
int mib[] = {CTL_HW, typeSpecifier};
sysctl(mib, , &results, &size, NULL, );
return (NSUInteger) results;
} - (NSUInteger) cpuFrequency
{
return [self getSysInfo:HW_CPU_FREQ];
} - (NSUInteger) busFrequency
{
return [self getSysInfo:HW_BUS_FREQ];
} - (NSUInteger) cpuCount
{
return [self getSysInfo:HW_NCPU];
} - (NSUInteger) totalMemory
{
return [self getSysInfo:HW_PHYSMEM];
} - (NSUInteger) userMemory
{
return [self getSysInfo:HW_USERMEM];
} - (NSUInteger) maxSocketBufferSize
{
return [self getSysInfo:KIPC_MAXSOCKBUF];
}

查看磁盘空间

- (NSNumber *) totalDiskSpace
{
NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
return [fattributes objectForKey:NSFileSystemSize];
} - (NSNumber *) freeDiskSpace
{
NSDictionary *fattributes = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:nil];
return [fattributes objectForKey:NSFileSystemFreeSize];
}