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