iOS编译期和运行时系统版本判断代码

在实际开发的时候我们常常会对系统的版本进行判断进而来适应不同的API或者开发情形。一般会在两种情况下做系统版本判断:

1,编译期:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000

//xcode baseSDK为7.0或者以上

#else

//xcode baseSDK为7.0以下的

#endif

编译期的版本判断是指在编译代码是XCode的sdk环境,这里就是指baseSDK的版本(xcode 5 是 IOS 7.0),有一些在编译的时候就可以区分的就用这个办法区分版本,比如文字对齐的枚举NSTextAligment(IOS6以后)和UITextAligment(IOS6以前) 这种枚举类型 在编译期的时候编译期就会替换,可以在代码里用上面这种办法保证你的代码高版的的xcode下不出warning,同时在低版本的xcode下也能编译。

2,运行时:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

//设备系统为IOS 7.0或者以上的

}else{

//设备系统为IOS 7.0以下的

}

运行时判断版本用最普遍的就是应用需要适配低版本的IOS系统。比如一个新API在IOS6以后才出现,这种时候就要使用运行时的判断方法。当运行在IOS8系统的时候,调用新API。运行在IOS8以下系统的时候,调用低版本替代的函数(可能是自己实现,可能是不处理)

如果app的代码用了IOS6.0后出现的新API,代码中区分版本的时候用了编译期区分版本的方法。在有IOS 6.0 sdk的xcode环境下能编译通过,但是当app运行在IOS6.0以下的系统,并且调用到这个新API的时候会崩溃。因为IOS6.0以下的系统没有这个API的声明和实现。 这种情况就应该用运行时判断版本的办法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容