《iOS 6高级开发手册(第4版)》——1.4节秘诀:取回额外的设备信息

简介:

本节书摘来自异步社区《iOS 6高级开发手册(第4版)》一书中的第1章,第1.4节秘诀:取回额外的设备信息,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.4 秘诀:取回额外的设备信息
iOS 6高级开发手册(第4版)
sysctl()和sysctlbyname()允许获取系统信息。这些标准的UNIX函数用于询问操作系统有关硬件和OS的详细信息。看一眼Macintosh上的/usr/include/sys/sysctl.h包括文件,就能对所提供的范围类型有一个感觉。在那里,能够找到一份可以用作这些函数的参数常量的详尽列表。

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

你可能想知道:当标准的UIDevice类可以根据需要返回设备型号时,为什么这个类还要包括一个平台方法。答案在于区分不同的单元类型。

iPhone 3GS的型号只是“iPhone”,iPhone 4S也是一样。与之相反,这个秘诀为3GS返回的平台值是“iPhone2,1”,为iPhone 4S返回的是“iPhone 4,1”。这允许以编程方式把3GS单元与第一代iPhone(“iPhone1,1”)或iPhone 3G(“iPhone1,2”)区分开。

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

秘诀1-2 扩展设备信息收集

@implementation UIDevice (Hardware)
+ (NSString *) getSysInfoByName:(char *)typeSpecifier
{
    // Recover sysctl information by name
    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 [UIDevice getSysInfoByName:"hw.machine"];
}
- (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 [UIDevice getSysInfo:HW_CPU_FREQ];
}

- (NSUInteger) busFrequency
{
    return [UIDevice getSysInfo:HW_BUS_FREQ];
}

- (NSUInteger) totalMemory
{
    return [UIDevice getSysInfo:HW_PHYSMEM];
}

- (NSUInteger) userMemory
{
    return [UIDevice getSysInfo:HW_USERMEM];
}

- (NSUInteger) maxSocketBufferSize
{
    return [UIDevice getSysInfo:KIPC_MAXSOCKBUF];
}
@end
获取这个秘诀的代码

{要查找这个秘诀的完整示例项目,可以浏览https://github.com/erica/iOS-6-Advanced-Cookbook,并进入第1章的文件夹。

相关文章
|
3月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
19 0
|
3月前
|
存储 Linux iOS开发
iOS 技术博主指南:填写苹果应用上架中的隐私政策信息
iOS 技术博主指南:填写苹果应用上架中的隐私政策信息
|
移动开发 文字识别 开发工具
iOS小技能: OCR 之银行卡/身份证信息识别(免费次数无限)
1. 功能:扫描银行卡识别信息( 银行名称、 银行卡号)并截取银行卡图像 2. 应用场景:快速填充银行卡号的场景,比如商户进件、实名认证
329 0
iOS小技能: OCR 之银行卡/身份证信息识别(免费次数无限)
|
JSON Android开发 iOS开发
Python | 获取iOS设备信息的轻量级框架
今天接着上一篇Python | 获取Android设备信息的轻量级框架,来讲讲如何通过Python实现一个轻量级的库来获取电脑上连接的iOS设备信
391 0
|
编解码 IDE 开发工具
iOS自动化实操--设备基本信息获取与计算器案例详解
iOS自动化实操--设备基本信息获取与计算器案例详解
226 0
|
iOS开发
iOS蓝牙打印价签:商品条码、品名、零售价、规格信息等
iOS蓝牙打印价签:商品条码、品名、零售价、规格信息等
186 0
iOS蓝牙打印价签:商品条码、品名、零售价、规格信息等
|
存储 安全 JavaScript
iOS ASO 数据清理(Accounts帐号信息、Keychain数据)
iOS ASO 数据清理(Accounts帐号信息、Keychain数据)
905 0
iOS ASO 数据清理(Accounts帐号信息、Keychain数据)
|
移动开发 定位技术 API
iOS测试技巧:通过GPX文件修改经纬度信息(模拟iOS设备的位置)
iOS测试技巧:通过GPX文件修改经纬度信息(模拟iOS设备的位置)
657 0
iOS测试技巧:通过GPX文件修改经纬度信息(模拟iOS设备的位置)