执行环境

可以从 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. python爬虫系列之数据的存储(二):csv库的使用

    上一篇我们讲了怎么用 json格式保存数据,这一篇我们来看看如何用 csv模块进行数据读写. 一.csv简介 CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因 ...

  2. bestcoder#9--1001--Lotus and Characters

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others) 问题描述 Lotus有nn种字母, ...

  3. python学习之路(25)

    继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base clas ...

  4. win10笔记本设置管理员权限

    1.在右下方任务栏的“搜索web和windows”输入框中输入“gpedit.msc”,电脑会自行搜索,搜索完毕之后鼠标点击打开.

  5. 《Effective Java》读书笔记 - 3.对于所有对象都通用的方法

    Chapter 3 Methods Common to All Objects Item 8: Obey the general contract when overriding equals 以下几 ...

  6. Zookeeper集群及配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  7. HDU 2243 ( Trie图 矩阵构造幂和 )

    题意 :  长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义. 比如一共有2个词根 aa 和 ab ,则可能存在104个长度不超过3的单词, ...

  8. 搜索引擎算法研究专题六:HITS算法

    搜索引擎算法研究专题六:HITS算法 2017年12月19日 ⁄ 搜索技术 ⁄ 共 1240字 ⁄ 字号 小 中 大 ⁄ 评论关闭   HITS(Hyperlink-Induced Topic Sea ...

  9. java 解析上传的Excel文件

    java poi解析上传的Excel文件 package com.zhl.push.Utils; /** * @Author TAO * @ClassName ExcelData * @Descrip ...

  10. C/C++判断字符串是否包含某个字符串

    C风格 #include <iostream> #include <string> #include <cstring> using namespace std; ...