sysctl()和sysctlbyname()允許獲取系統資訊。這些標準的UNIX函式用於詢問作業系統有關硬體和OS的詳細資訊。
這些常量使你能夠檢查核心資訊,比如系統的CPU頻率,可用的記憶體量等。它引入了一個UIDevice類,用於蒐集系統資訊,並通過一系列方法呼叫返回它。
每個型號都提供了獨特的內建能力,準確知道你正在處理哪款iPhone有助於確定那個單元是否有可能支援諸如可訪問性,GPS和磁力計之類的特性。
#pragma mark sysctlbyname utils - (NSString *) getSysInfoByName:(char *)typeSpecifier { size_t size; sysctlbyname(typeSpecifier, NULL, &size, NULL, 0); char *answer = malloc(size); sysctlbyname(typeSpecifier, answer, &size, NULL, 0); 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"]; }
返回的是:
2014-12-22 15:59:40.391 HelloWorld[2673:943598] Platform: iPhone5,4 2014-12-22 15:59:40.393 HelloWorld[2673:943598] HWModel: N49AP
#pragma mark sysctl utils - (NSUInteger) getSysInfo: (uint) typeSpecifier { size_t size = sizeof(int); int results; int mib[2] = {CTL_HW, typeSpecifier}; sysctl(mib, 2, &results, &size, NULL, 0); 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]; }