适配低版本和高版本系统的API(转载)
2016-02-03 10:21
239 查看
前言
iOS系统的版本每年都在更新,而每次的更新必然伴随着,新的API的出现和旧的API的废弃。有时,新的版本中,旧的API固然可以实现效果,但是还是会在细节方面有所区别。
例子:
iOS 7中,我们使用 UIActionSheet由下及上弹出提示框,这个API 在iOS7中固然很好,没有问题,到了iOS8中,他虽然可以可以使用,但是当你在开发中,将手机设置为不可转屏,view是不会旋转,可是这个UIActionSheet 却可以自行旋转。
这是由于苹果在iOS8中更新了新的API 为 UIAlertAction 和 UIAlertController 的配合使用才不会出现这种情况,而新的API更加的易用,直接在block回调函数中,响应事件。
那么同一个项目,使用不同版本的xcode来打开,如何保证编译的时候不会报错?让代码既可以在高版本的xcode运行,也可以在旧的(低版本)xcode运行呢?
还有使用高版本系统的API的时候,如何保证在系统版本较低的机子上运行时,不会出现crash。
解决办法
系统中有这样的一些宏... #define __IPHONE_7_0 70000 #define __IPHONE_7_1 70100 #define __IPHONE_8_0 80000 #define __IPHONE_8_1 80100 #define __IPHONE_8_2 80200 #define __IPHONE_8_3 80300 #define __IPHONE_8_4 80400 #define __IPHONE_9_0 90000 #define __IPHONE_9_1 90100 ...
当你使用xcode 6.4编译项目的时候,生成的安装包,无论是装在 iOS8 还是 iOS9的手机上,iOS9系统的API都不会存在的。xcode 6.4 版本最高支持iOS8.4系统的API。
原因:因为xcode 6.4版本中没有定义 上面9开头的这些宏,编译的时候,就不会包含这些宏对应系统的API,如果之前是高版本xcode编译的,例如xcode7.1 ,此时就会编译就会报错。需要使用下面的方法来过滤掉,低版本xcode编译高版本xcode写的项目就不会报错了
在项目中,我们需要先定义一个检测系统版本的宏#define CurrentSystemVersion ([[[UIDevice currentDevice] systemVersion] floatValue])
// 扩住的是整个方法,判断该版本xcode的API是否可用,编译时是否需要生成这段代码 #ifdef __IPHONE_9_2 //这里写高版本xcode所具有的新的API //在高版本xcode运行,此部分的代码有颜色 //在低版本xcode运行,此本分代码为白色,也就是不会执行 #endif
// 扩住的是方法的一部份代码 if (CurrentSystemVersion < 7.0) { //这里写的是低版本的API 代码 }else{ // xcode 6 以上版本才有的iOS8系统的API,判断该版本xcode的API是否可用,编译时是否需要生成这段代码 #ifdef __IPHONE_8_0 //这里写高版本的新的API //在高版本xcode运行,此部分的代码有颜色 //在低版本xcod a3cd e运行,此本分代码为白色,也就是不会执行 #endif }
使用xcode 7.1编译项目的时候,生成的安装包,无论是装在 iOS8 还是 iOS9的手机上,iOS9系统的API是存在的。xcode 7.1 版本最高支持iOS9.1系统的API。
总结:
# define __IPHONE_9_2 90200
这些宏的作用是判断该版本的xcode是否具有这个宏所定义的系统的API,在xcode中有这个宏就代表有这个宏所定义的系统的API。
#define CurrentSystemVersion ([[[UIDevice currentDevice] systemVersion] floatValue])
通常这个宏是用来区分手机不同版本的系统应该使用什么版本的API。
说明:转载自:http://www.jianshu.com/p/36bde57c532a
相关文章推荐
- Android Manifest 用法
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 什么是 GraphQL?
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- Spark RDD API详解(一) Map和Reduce
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 一个小型js框架myJSFrame附API使用帮助
- 详细分析交换机、路由器、集线器的区别和联系
- PowerShell打开或关闭光驱
- 批处理的api WMIC学习体会有感第1/2页
- 批处理 API实现文件下载的代码第1/2页
- Lua教程(十七):C API简介
- 强制删除工具 xdelbox xdelbox1.5正式版下载
- 揪出交换机端口背后“凶手”导致网速太慢
- 电脑重启后突然检测不到硬盘的原因分析与解决办法
- C#中设计、使用Fluent API