iOS判斷系統版本號的四種方法


https://blog.csdn.net/Cloudox_/article/details/53408693

版權聲明:本文為博主原創文章,允許轉載,注明出處,回復告訴博主一聲即可。 https://blog.csdn.net/Cloudox_/article/details/53408693

在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 以下系統的處理
}

其實根據類和方法來判斷直接就可以決定使用什么類和方法了,也算是跳過了先判斷系統然后選擇方法這一步,嚴格來說已經不算是為了判斷系統版本了。

 

#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
// Check if new API is not available
if (![someData respondsToSelector:@selector(base64EncodedDataWithOptions:)])
{
// Use the old API
base64String = [someData base64Encoding];
}
else
#endif
{
// Use the new API
base64String = [someData base64EncodedDataWithOptions:0];
}


版權所有:http://blog.csdn.net/cloudox_


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM