if ([NSProcessInfo instancesRespondToSelector:@selector(isOperatingSystemAtLeastVersion:)]) {
// conditionally check for any version >= iOS 8 using 'isOperatingSystemAtLeastVersion'
} else {
// we're on iOS 7 or below
}
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
// Load resources for iOS 6.1 or earlier
} else {
// Load resources for iOS 7 or later
}
int versionNumbers[vN.count];
for (int i = 0; i < sizeof(versionNumbers)/sizeof(versionNumbers[0]); i++)
versionNumbers[i] = [[vN objectAtIndex:i] integerValue];
10 回答
Best current version ,无需在NSString中处理数字搜索就是定义
macros
(参见原始答案:Check iPhone iOS Version)这些宏确实存在于github中,请参阅:https://github.com/carlj/CJAMacros/blob/master/CJAMacros/CJAMacros.h
像这样:
并像这样使用它们:
下面的过时版本
获取操作系统版本:
返回string,可以转换为int / float via
像这样
和这样比较
For Swift 4.0 syntax
下面的示例只是检查设备是否为
iOS11
或更高版本 .更新
从iOS 8我们可以在
NSProcessInfo
上使用新的isOperatingSystemAtLeastVersion
方法请注意,这将在iOS 7上崩溃,因为在iOS 8之前不存在API . 如果您支持iOS 7及更低版本,则可以安全地执行检查
原始答案iOS <8
为了完整起见,这里是Apple自己在iOS 7 UI Transition Guide中提出的另一种方法,它涉及检查Foundation Framework版本 .
我知道我来不及回答这个问题 . 我不确定我的方法是否仍适用于低iOS版本(<5.0):
你可以得到这些结果:
[[UIDevice currentDevice] systemVersion];
或检查版本
您可以从here获取以下宏 .
希望这可以帮助
马雷克塞贝拉大部分时间都很棒,但是如果你像我一样发现你需要经常检查iOS版本,你不希望在内存中不断运行宏,因为你会经历一个非常轻微的减速,特别是在旧设备上 .
相反,您希望将iOS版本计算为浮动一次并将其存储在某处 . 在我的例子中,我有一个
GlobalVariables
单例类,我用它来检查代码中的iOS版本,使用如下代码:要在您的应用中启用此功能,请使用此代码(对于使用ARC的iOS 5):
GlobalVariables.h :
GlobalVariables.m :
现在,您可以轻松检查iOS版本,而无需经常运行宏 . 特别注意我是如何将
[[UIDevice currentDevice] systemVersion]
NSString转换为CGFloat的,这种CGFloat可以不使用许多已经在本页面指出的任何不正确的方法而不断访问 . 我的方法假设版本字符串的格式为n.nn.nn(允许以后的位丢失)并适用于iOS5 . 在测试中,这种方法比不断运行宏的速度快得多 .希望这有助于任何人遇到我遇到的问题!
要获得更多特定版本号信息,请将主要版本和次要版本分开:
数组
vN
将包含主要和次要版本作为字符串,但如果要进行比较,版本号应存储为数字(整数) . 您可以添加此代码以将它们存储在C-array *versionNumbers
中:*此处使用的C数组用于更简洁的语法 .
在MonoTouch中:
要获得主要版本使用:
对于次要版本使用:
对iOS版本少于5(所有版本)的简单检查: