检查iOS 7或更早版本的最佳方法?

检查iOS 7或更早版本的最佳方法?,ios,ios6,ios7,Ios,Ios6,Ios7,我需要根据运行的iOS版本重新配置一些UI,因此我需要一种检查iOS版本的好方法。目前我正在这样做: if ([[[UIDevice currentDevice] systemVersion] isEqualToString: @"7.0"]) { //do stuff } 我不希望对这些字符串比较进行硬编码,并基于此做出决策。有更好的方法吗?我总是将它们保存在Constants.h文件中: if (NSFoundationVersionNumber > NSFoundation

我需要根据运行的iOS版本重新配置一些UI,因此我需要一种检查iOS版本的好方法。目前我正在这样做:

if ([[[UIDevice currentDevice] systemVersion] isEqualToString: @"7.0"]) {
    //do stuff
}

我不希望对这些字符串比较进行硬编码,并基于此做出决策。有更好的方法吗?

我总是将它们保存在Constants.h文件中:

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer

}
else {

    // do stuff for older versions than iOS 7
}
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) 
#define IS_OS_5_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0)
#define IS_OS_6_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0)
#define IS_OS_7_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
#define IS_OS_8_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
#define IS_OS_9_OR_LATER    ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0)
尽管我始终更喜欢上面的宏,但为了完成公认的答案,以下是苹果认可的方式:

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {

    // do stuff for iOS 7 and newer

}
else {

    // do stuff for older versions than iOS 7
}

如果iOS 7.1面世,这一点将被打破。但你的思路是正确的。如果你关心iOS7的总体情况,请将字符串拆分并仅比较主要版本。你看过[这个答案吗?][1][1]:这看起来是最稳定的工具人,很好的实用工具带。它的副作用是每次使用宏时都会调用[[UIDevice currentDevice]systemVersion]floatValue]。systemVersion方法在历史上的速度惊人地慢,因此,如果对任何描述进行递归,请缓存结果值。有关详细信息,请参见上的评论。为什么我更喜欢我的答案:1。我只关心大版本5、6、7,所以float就可以了。2.到目前为止,这个原始浮点比较从未让我失望过。有时,在与“你必须意识到边缘案例永远不会发生”的斗争中,便利会获胜。收藏不错!补充:)+1我以前从未见过这种情况。值得一提的是,这是苹果公司在2013年采用iOS 7会议的技术讲座上提出的建议——尽管他们将
NSFoundationVersionNumber
包装在调用
floor()
。不——这不会使检查无效。请查看NSObjCRuntime.h。它也在iOS 7过渡指南中印刷:。请参阅“有条件地加载资源”。当前要检查的最后一个版本仍然是iOS7:#定义NSFoundationVersionNumber_iOS_7_1 1047.25