执行环境

可以从 UIDevice 的属性 model 得到在现在执行的环境。例子如下:

1

2

3

4

5

6

7

8

9

10

NSString *modelname = [[UIDevice currentDevice]model];

if ([modelname isEqualToString:@"iPhone"]) {

// iPhone

}

if ([modelname isEqualToString:@"IPod Touch"]) {

// iPod touch

}

if ([modelname isEqualToString:@"iPhone Simulator"]) {

// iPhone Simulator

}

或者

1

2

3

4

5

6

7

8

9

10

11

12

13

#import <TargetConditionals.h>

#if TARGET_OS_IPHONE

// iPhone Device

#endif

#if TARGET_IPHONE_SIMULATOR

// iPhone Simulator

#endif

#if !TARGET_IPHONE_SIMULATOR

// iPhone Device

#endif

或:

if ([[UIDevicecurrentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

// iPhone and iPod touch style UI

} else {

// iPad style UI

}

iPhone 机器版本

可以通过 uname 函数取得当前机器的版本。例子如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

struct utsname u;

uname(&u);

NSString *machine = [NSString stringWithCString:u.machine];

if ([machine isEqualToString:@"iPhone1,1"]) {

// iPhone 1G

}

if ([machine isEqualToString:@"iPhone1,2"]) {

// iPhone 3G

}

if ([machine isEqualToString:@"iPhone2,1"]) {

// iPhone 3GS

}

if ([machine isEqualToString:@"iPod1,1"]) {

// iPod touch 1G

}

if ([machine isEqualToString:@"iPod2,1"]) {

// iPod touch 2G

}

if ([machine isEqualToString:@"iPod3,1"]) {

// iPod touch Late2009

}

或者通过 sysctlbyname() 函数取得:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

- (NSString *) platform

{

size_t size;

sysctlbyname("hw.machine", NULL, &size, NULL, 0);

char *machine = malloc(size);

sysctlbyname("hw.machine", machine, &size, NULL, 0);

/*

Possible values:

"iPhone1,1" = iPhone 1G

"iPhone1,2" = iPhone 3G

"iPhone2,1" = iPhone 3GS

"iPod1,1"   = iPod touch 1G

"iPod2,1"   = iPod touch 2G

*/

NSString *platform = [NSString stringWithCString:machine];

free(machine);

return platform;

}

iPhone OS 版本

可以使用 UIDevice 的属性 systemVersion 来得到。例子如下:

1

2

3

4

5

6

7

8

9

10

NSString *osversion = [UIDevice currentDevice].systemVersion;

if ([osversion isEqualToString:@"2.1"]) {

// iPhone

}

if ([osversion isEqualToString:@"2.2.1"]) {

// iPod touch

}

if ([osversion isEqualToString:@"3.0"]) {

// iPhone Simulator

}

这里有一个别人写好的类库,专门用来得到系统版本信息,用起来比较方便。

iPhone SDK 版本宏

就像在windows系统下用 WINVER 宏来判断 windows 系统版本一样,iPhone OS 中也有类似的宏。

1

2

3

4

// 当前系统支持的最小版本

__IPHONE_OS_VERSION_MIN_REQUIRED

// 当前系统支持的最大版本

__IPHONE_OS_VERSION_MAX_ALLOWED

比如用 iPhone OS SDK 3.1.2 编译的程序

1

2

__IPHONE_OS_VERSION_MIN_REQUIRED == __IPHONE_3_0

__IPHONE_OS_VERSION_MAX_ALLOWED == __IPHONE_3_1

这时,我们可以在程序中使用下面类似的 $ifdef 语句:

1

2

3

4

5

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_2_2

// iPhone OS SDK 3.0 以后版本的处理

#else

// iPhone OS SDK 3.0 之前版本的处理

#endif

又或者 iPhone OS SDK 4 推出的时候,可以:

1

2

3

4

5

6

7

8

9

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_2_2

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_3_1

// iPhone OS SDK 4.0 以后版本的处理

#else

// iPhone OS SDK 3.0 ~ 4.0 版本的处理

#endif

#else

// iPhone OS SDK 3.0 之前版本的处理

#endif

感谢:http://www.yifeiyang.net/iphone-development-techniques-of-environmental-chapter-7-distinguish-between-different-versions-of-the-iphone/

iOS下设备版本获取的更多相关文章

  1. 史上最全的iOS各种设备信息获取总结

    来源:si1ence 链接:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述一下各种信息 ...

  2. iOS: iOS各种设备信息获取

    Author:si1ence Link:http://www.jianshu.com/p/b23016bb97af 为了统计用户信息.下发广告,服务器端往往需要手机用户设备及app的各种信息,下面讲述 ...

  3. ios下通过webservice获取数据

    经历了两天的摸索,终于成功获取了数据,因为公司要做一个停车入库的信息查询,所以需要访问webservice的接口,由于没有接触过webservice,所以第一天就是各种搜索资料,类库,各种尝试,甚至是 ...

  4. 识别ios系统设备并获取版本号

    let isIOS = userAgent.toLowerCase().indexOf("like mac os x") > 0; //ios终端 if (isIOS) { ...

  5. iOS 获取设备版本型号

    #import "sys/utsname.h" /** *  设备版本 * *  @return e.g. iPhone 5S */+ (NSString*)deviceVersi ...

  6. iOS开发-Swift获取手机设备信息(UIDevice)

    使用UiDevice获取设备信息 获取设备名称 let name = UIDevice.currentDevice().name 获取设备系统名称 let systemName = UIDevice. ...

  7. Cordova webapp实战开发:(6)如何写一个iOS下获取APP版本号的插件?

    上一篇我们学习了如何写一个Andorid下自动更新的插件,我想还有一部分看本系列blog的开发人员希望学习在iOS下如何做插件的吧,那么今天你就可以来看看这篇文字了. 本次练习你能学到的 学习如何获取 ...

  8. iOS开发-Object-C获取手机设备信息(UIDevice)

    一.获取UiDevice设备信息 // 获取设备名称 NSString *name = [[UIDevice currentDevice] name]; // 获取设备系统名称 NSString *s ...

  9. ios下点击穿透focus获取问题

    在ios下的浏览器中当点击当前页的一个按钮,用window.location.href进行跳转时,如果下一个页面里这点击按钮的位置是一个textarea或者text等那么他会触发focus事件,会出现 ...

随机推荐

  1. Android图片上传(头像裁切+原图原样)

    下面简单铺一下代码: (一)头像裁切.上传服务器(代码) 这里上边的按钮是头像的点击事件,弹出底部的头像选择框,下边的按钮跳到下个页面,进行原图上传. ? 1 2 3 4 5 6 7 8 9 10 1 ...

  2. 3D Computer Grapihcs Using OpenGL - 14 OpenGL Instancing

    如果我们需要绘制两个(或者多个)一样的立方体(或者物体),只是位置.缩放.旋转不一样,那么我们可以不需要多次将这个物体的顶点信息.颜色信息等发送到显卡,而是发送一次,绘制多次,仅仅是每次绘制之前应用不 ...

  3. 源码阅读-Kingfisher

    最后更新:2018-01-16 使用教程: 官方的链接 使用 Kingfisher 处理网络图片的读取与缓存 1. 开始使用 桥接 KingFisher, 利用 KingfisherCompatibl ...

  4. [CSP-S模拟测试]:简单的括号序列(组合数)

    题目传送门(内部题82) 输入格式 一行一个字符串$ss$,保证$ss$中只包含$'('$和$')'$. 输出格式 一行一个整数,表示满足要求的子序列数对$10^9+7$的结果. 样例 样例输入1: ...

  5. linux防火墙iptables简单介绍

    --append  -A chain        Append to chain  --delete  -D chain        Delete matching rule from chain ...

  6. Elasticsearch入门(二)

    基础概念 Elasticsearch有几个核心概念,从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意味着,从索引一个文档 ...

  7. Matlab——程序设计

    M文件 我们之前所做的运算————> 算式不太长,或想以交谈式方式进行运算 如果算式很长或是需要一再执行的算式————> 采用M文件的方式 [将指令及算式写成巨集程式然后储存成一个特别的文 ...

  8. Alert弹出框处理

    selenium的API提供了Alert类对alert弹出框的处理的方法,涉及到的方法有text,dismiss(),accept()和send_keys(),在javascript中主要有alert ...

  9. 【Qt开发】Qt5.7中文显示乱码解决方法两种

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8 ...

  10. 浅谈JVM及原理

    前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 运行流程 我们都 ...