美文网首页我依然爱iOS工具ios
iOS判断系统版本号的四种方法

iOS判断系统版本号的四种方法

作者: Cloudox_ | 来源:发表于2017-11-22 16:21 被阅读119次

    在iOS开发过程中,如果要使用到一些跟特定系统版本特性有关的功能,或者要适配低版本系统的用户,还有一些方法是新版本系统才有的,有一些方法在新版本中已经弃用了,这都需要对不同系统版本的设备进行分别的处理,而这有个前提就是判断系统的版本号。

    判断系统版本号有多种方法,这里都列出来供大家和自己在开发中需要时进行选择使用。

    方法一:直接获取系统版本

    iOS提供了直接获取系统版本号的方法:

    NSString *version = [UIDevice currentDevice].systemVersion;
    if (version.doubleValue >= 9.0) {
        // 针对 9.0 以上的iOS系统进行处理
    } else {
        // 针对 9.0 以下的iOS系统进行处理
    }
    

    这种方法应该说也是最常见和常用的方法了。

    方法二:通过Foundation框架版本号

    iOS系统升级时Foundation框架也会升级版本号,我们可以通过获取Foundation的版本号来判断对应的iOS版本,这个iOS也提供了很直观的宏来进行判断:

    #if TARGET_OS_IPHONE
    #define NSFoundationVersionNumber_iPhoneOS_2_0  678.24
    #define NSFoundationVersionNumber_iPhoneOS_2_1  678.26
    #define NSFoundationVersionNumber_iPhoneOS_2_2  678.29
    #define NSFoundationVersionNumber_iPhoneOS_3_0  678.47
    #define NSFoundationVersionNumber_iPhoneOS_3_1  678.51
    #define NSFoundationVersionNumber_iPhoneOS_3_2  678.60
    #define NSFoundationVersionNumber_iOS_4_0  751.32
    #define NSFoundationVersionNumber_iOS_4_1  751.37
    #define NSFoundationVersionNumber_iOS_4_2  751.49
    #define NSFoundationVersionNumber_iOS_4_3  751.49
    #define NSFoundationVersionNumber_iOS_5_0  881.00
    #define NSFoundationVersionNumber_iOS_5_1  890.10
    #define NSFoundationVersionNumber_iOS_6_0  992.00
    #define NSFoundationVersionNumber_iOS_6_1  993.00
    #define NSFoundationVersionNumber_iOS_7_0 1047.20
    #define NSFoundationVersionNumber_iOS_7_1 1047.25
    #define NSFoundationVersionNumber_iOS_8_0 1140.11
    #define NSFoundationVersionNumber_iOS_8_1 1141.1
    #define NSFoundationVersionNumber_iOS_8_2 1142.14
    #define NSFoundationVersionNumber_iOS_8_3 1144.17
    #define NSFoundationVersionNumber_iOS_8_4 1144.17
    #define NSFoundationVersionNumber_iOS_8_x_Max 1199
    #define NSFoundationVersionNumber_iOS_9_0 1240.1
    #define NSFoundationVersionNumber_iOS_9_1 1241.14
    #define NSFoundationVersionNumber_iOS_9_2 1242.12
    #define NSFoundationVersionNumber_iOS_9_3 1242.12
    #define NSFoundationVersionNumber_iOS_9_4 1280.25
    #define NSFoundationVersionNumber_iOS_9_x_Max 1299
    #endif
    

    可以看到,最上面判断了这是iPhone的系统,相应的还有Mac的系统。这些都是NSFoundationVersionNumber这个宏定义的值,我们可以判断它来获取当前设备的系统版本,用法如下:

    if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) {
        // iOS 9.0 以上系统的处理
    } else {
        // iOS 9.0 以下系统的处理
    }
    

    方法三:根据特有的类判断

    我们之前说有些类和方法是新版本才有的,要使用的时候要判断一下版本号,但也可以反过来利用这一点,判断有没有这个类从而得知当前的版本号范围。

    比如说 UIAlertController 这个类,是iOS 8之后才出现的,用来取代 UIAlertView 和 UIActionsheet 的,如果当前系统没有这个类,说明是低于iOS 8的,可以这么判断:

    if (NSClassFromString(@"UIAlertController")) { // 存在这个类
        // iOS 8.0 以上系统的处理
    } else {
        // iOS 8.0 以下系统的处理
    }
    

    方法四:根据特有的方法进行判断

    类似于根据特有的类来判断,有些方法也是某个系统版本之后才出现的,根据有无这个方法即可得知当前版本号的范围,比如 boundingRectWithSize:options:attributes:context: 这个方法是 iOS 7.0 之后才有的,可以这样判断:

    if ([@"" respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { // 存在这个方法
        // iOS 7.0 以上系统的处理
    } else {
        // iOS 7.0 以下系统的处理
    }
    

    其实根据类和方法来判断直接就可以决定使用什么类和方法了,也算是跳过了先判断系统然后选择方法这一步,严格来说已经不算是为了判断系统版本了。


    查看作者首页

    相关文章

      网友评论

        本文标题:iOS判断系统版本号的四种方法

        本文链接:https://www.haomeiwen.com/subject/mwcovxtx.html