iOS判断系统版本

作者: Boy_iOS | 来源:发表于2015-09-05 11:26 被阅读7550次

    iOS系统类库里面有一个Availability.h头文件,有一些宏定义。

    #define __IPHONE_2_0     20000
    #define __IPHONE_2_1     20100
    #define __IPHONE_2_2     20200
    #define __IPHONE_3_0     30000
    #define __IPHONE_3_1     30100
    #define __IPHONE_3_2     30200
    #define __IPHONE_4_0     40000
    #define __IPHONE_4_1     40100
    #define __IPHONE_4_2     40200
    #define __IPHONE_4_3     40300
    #define __IPHONE_5_0     50000
    #define __IPHONE_5_1     50100
    #define __IPHONE_6_0     60000
    #define __IPHONE_6_1     60100
    #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
    

    这些宏定义可以判断当前系统版本是否是大于等于某个版本,例如:

    #ifdef __IPHONE_7_0
    - (UIRectEdge)edgesForExtendedLayout {
        return UIRectEdgeNone;
    }
    #endif
    

    判断系统版本是否在iOS 7.0以上,如果是则执行中间的代码.

    为什么这样就可以判断系统版本呢?

    因为如果iOS的系统是7.0,那么肯定有这样一个宏定义“#define __IPHONE_7_0 70000”;如果系统版本低于7.0肯定没有这个宏定义

    相关文章

      网友评论

      • 雨影:我经过真机和模拟器测试,此方法是行不通的,已经这个宏是 SDK 相关的,与程序运行时是没有关系的.希望楼主也测试下http://www.cnblogs.com/walkerwang/p/4126936.html
      • EmptyWalker:我发现,我在Xcode 8.2中去做这个判断,然后运行一个iOS 8.3的模拟器,判断代码如下:
        #ifdef __IPHONE_9_0
        item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
        #endif
        结果发现,由于Xcode中有这个宏,结果还会执行中间的代码

        不知道这个写法还有没有其他问题了
        我不讲道理的:原因http://www.jianshu.com/p/6144a63597ce
        我不讲道理的:真机时也发现了这个问题!
      • fe540d8f2564:这是编译期的东西,这么做真的好吗?
        雨影:@断风刀 确实是,所以不能用这种方式判断
        断风刀:@fe540d8f2564 确实不好,运行时还是不能起作用。
      • 2068e5e51f60:系统的宏真方便!
      • 仰望星空之Rocky:为撒,,定义8.3的系统为: 80300而不是83000?
        9a8852f0363f:@wwwang 8.12的话 81200
      • 96a93bd001d0:学习了:relaxed:
      • 子斌:顶一个
        Boy_iOS:@子斌 这种判断方式比其它的要优雅的多~~~~

      本文标题:iOS判断系统版本

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