YYKit中对UIDevice的拓展,accumulate knowledge !!!

首先

#include <sys/socket.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <mach/mach.h>
#include <arpa/inet.h>
#include <ifaddrs.h>

1. Machine Model

参考博客

如何获取机器的型号呢?有人会说使用:[UIDevice currentDevice].model 方案,这是不正确的。因为这个方案只会区分iPhone 和 iPod touch。

在YYKit中,他是通过BSD 底层方法来获取型号,例如:iPhone6,2 、 iPhone4,1 、x86_64 。

YYKit获取Model代码:

#import <sys/sysctl.h>

- (NSString *)machineModel {
    static dispatch_once_t one;
    static NSString *model;
    dispatch_once(&one, ^{
        size_t size;
        sysctlbyname("hw.machine", NULL, &size, NULL, 0);
        char *machine = malloc(size);
        sysctlbyname("hw.machine", machine, &size, NULL, 0);
        model = [NSString stringWithUTF8String:machine];
        free(machine);
    });
    return model;
}

第二种获取Model代码:

#import <sys/utsname.h>

- (NSString *)machineModel
{
    struct utsname systeminfo;
    uname(&systeminfo);
    return [NSString stringWithCString:systeminfo.machine encoding:NSUTF8StringEncoding];
}

2.1 系统库:sysctl.h 和 utsname.h 研究研究

utsname.h

struct  utsname {
    char    sysname[_SYS_NAMELEN];  /* [XSI] Name of OS */
    char    nodename[_SYS_NAMELEN]; /* [XSI] Name of this network node */
    char    release[_SYS_NAMELEN];  /* [XSI] Release level */
    char    version[_SYS_NAMELEN];  /* [XSI] Version level */
    char    machine[_SYS_NAMELEN];  /* [XSI] Hardware type */
};
  • sysname :设备操作系统的名称,例如:Darwin 。
  • nodename :设备本地名称,例如:LVde-iPhone(手机可以通过Settings -> General -> About -> Name 修改)。
  • version :设备操作系统的版本,例如:Darwin Kernel Version 14.0.0: Tue Aug 19 15:08:02 PDT 2014; root:xnu-2783.1.72~8/RELEASE_ARM_S5L8940X
  • machine : 设备的型号,例如:iPhone6, 1 。

sysctl.h : Unix 系统底层获取系统相关的硬件等信息。 参考博客

#define CTL_KERN    1       /* "high kernel": proc, limits 内核核心信息及行为控制 */
#define CTL_VM      2       /* virtual memory  虚拟内存子系统统计数据和行为控制  */
#define CTL_VFS     3       /* file system, mount type is next  虚拟文件系统信息和行为控制 */
#define CTL_NET     4       /* network, see socket.h  网络子系统 */
#define CTL_DEBUG   5       /* debugging parameters  内核调试与信息查询 */
#define CTL_HW      6       /* generic cpu/io  硬件驱动与信息查询 */
#define CTL_MACHDEP 7       /* machine dependent  平台相关的行为控制 */
#define CTL_USER    8       /* user-level  用户环境配置  */

参考代码:

- (int)getSystemInfo:(int)typeSpecifier
{
    size_t size = sizeof(int);
    int results ;
    int mib[2] = {CTL_HW,typeSpecifier};
    sysctl(mib, 2, &results, &size, NULL, 0);
    return results;
}

- (void)test
{
    double totalMem = (double)[self getSystemInfo:HW_PHYSMEM];
    double userMem  = (double)[self getSystemInfo:HW_USERMEM];

    NSLog(@"总内存   - %f GB",totalMem/(1048576000.0));
    NSLog(@"用户内存 - %f GB",userMem/(1048576000.0));
}

//  结果:(// 1G = 1048576000 B)
总内存   - 1.000000 GB
用户内存 - 0.799863 GB

3. Machine Name

通过Machine Model 来匹配设备名:
部分代码:

          @"Watch1,1" : @"Apple Watch",
          @"Watch1,2" : @"Apple Watch",

          @"iPod1,1" : @"iPod touch 1",

          ......

          @"iPhone8,1" : @"iPhone 6s",
          @"iPhone8,2" : @"iPhone 6s Plus",
          @"iPhone8,4" : @"iPhone SE",

github地址


2.IP Address

我的一篇博文 - 2.2节中利用gethostbyname() 解析域名获取IP,但是在测试时候发生崩溃,后来经过资料显示是iOS 6以上不能使用。

YYKit中使用的正式另一种方案 - getifaddrs ;首先#import <ifaddrs.h>

2.1 关于getifaddrs

参考地址:Linux - getifaddrs

The getifaddrs() function creates a linked list of struckures describing the network interfaces of the local system, and stores the address of the first item of the list in * ifap.

3. Network Traffic Bytes

Get the network traffic bytes according to the network traffic type.

3.1 Network Traffic Type


iOS - YYAdd对UIDevice的拓展的更多相关文章

  1. 获取iOS系统版本 --- UIDevice

    UIDevice类是一个单例,其唯一的实例( [UIDevice currentDevice] ) 代表了当前使用的设备. 通过这个实例,可以获得设备的相关信息(包括系统名称,版本号,设备模式等等). ...

  2. iOS开发之UIDevice通知

    UIDevice类提供了一个单例对象,它代表着设备,通过它可以获得一些设备相关的信息,比如电池电量值(batteryLevel).电池状态(batteryState).设备的类型(model,比如iP ...

  3. iOS APP 新增表情包拓展

    图示教程如下:

  4. iOS捷径(Workflow 2.0)拓展

    前言 iOS12 捷径(Workflow 2.0)入门 iOS12 捷径(Workflow 2.0)进阶 iOS12捷径(Workflow 2.0)实例大全 注:本文主要介绍如何获取URL Schem ...

  5. iOS的UIDevice,NSBundle,NSLocale

    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用 户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取 ...

  6. iOS开发 获取手机信息(UIDevice,NSBundle,NSlocale)

    在开发中,需要获取当前设备的一些信息,可以通过UIDevice,NSbundle,NSlocale获取. UIDevice UIDevice 提供了多种属性,类函数及状态通知,可以检测手机电量,定位, ...

  7. iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发api可以获取到 ...

  8. ios 获取手机信息(UIDevice、NSBundle、NSLocale)

    iOS的SDK中提供了UIDevice.NSBundle,NSLocale. UIDevice        UIDevice提供了多种属性.类函数及状态通知,帮助我们全方位了解设备状况. 从检測电池 ...

  9. iOS地图 -- 定位初使用

    iOS的定位服务用到的框架是#import <CoreLocation/CoreLocation.h> 定位中用到的类是CLLocationManager 一.iOS8.0之前的定位 向用 ...

随机推荐

  1. 你买了多少ERP?

    企业使用ERP(或是其他管理系统),有三种模式:自开发.采购.租赁(SAAS).不知道企业的各级管理者们,是否想过这个问题——我们到底买(做.租)了多少“量”的ERP呢? 这个问题也许不是那么好回答. ...

  2. PacificA中的租约与失效检测解读

    PacificA是微软的在基于log的分布式存储系统中的复制技术. 由于配置管理器维护着当前配置的真实情况,因此主节点不必保持不变. 这是因为配置的本地视图在不同服务器上是不必同步的. 特别是,我们必 ...

  3. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  4. Nagios学习实践系列——基本安装篇

    开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...

  5. IE10/11克隆textarea时 bug

    重现代码 <!doctype html> <html> <head> <meta charset="UTF-8"> </hea ...

  6. Vim自动补全神器–YouCompleteMe

    一.简介 YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势 1.基于语义补全 2.整合实现了多种插件 clang_complete.AutoComplPop .Super ...

  7. kali 2.0 U盘安装错误Your installation cd-rom couldn't be mounted

    1.kali 2.0前天(2015.08.11)发布了.果断下载下来换掉本机的1.0版本. 2.用U盘安装的过程中,出现cd-rom无法挂载.提示错误Your installation CD-ROM ...

  8. AngularJS笔记---注册服务

    在前面的笔记中,了解到AngularJS的后台控制可以在Controller里面实现. 可是如果所有的逻辑代码都写到Controller会显得该Controller过于臃肿. 不方便维护, Angul ...

  9. 【原】移动web页面支持弹性滚动的3个方案

    有段时间一直折腾移动端页面弹性滚动的各种问题,做了点研究,今天做个小分享~ 传统 pc 端中,子容器高度超出父容器高度,通常使用 overflow:auto 可出现滚动条拖动显示溢出的内容,而移动we ...

  10. UVA11090 Going in Cycle!! [spfa负环]

    https://vjudge.net/problem/UVA-11090 平均权值最小的回路 为后面的做个铺垫 二分最小值,每条边权减去他,有负环说明有的回路平均权值小于他 spfa求负环的时候可以先 ...