適配版本

下面舉個簡單的例子來講明在iOS7.0和iOS6.1(以及更低版本)之間的適配問題(用的是xcode5.0,裏邊有6.1和7.0兩個版本的sdk)xcode

新建一個工程,默認的development target,base sdk以及模擬器的版本都是7.0,在AppDelegate中的didFinishLaunchingWithOptions方法裏iphone

  self.window.tintColor = [UIColor redColor];  spa


而後運行,這樣是沒有任何錯誤的。接下來將development target,base sdk以及模擬器的版本都改爲6.1(注意默認的xcode是沒有6.1的sdk的,須要本身另外導入)。而後運行,就會報錯:code

 


也就是說tintColor屬性在iOS6.1中根本就沒有,在編譯時候就會出錯。這時候以下加上判斷語句也是沒有用的,照樣報錯ip

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  get

    self.window.tintColor = [UIColor redColor];  it

  }  io


碰見這種狀況只能加上預處理語句,這樣寫:編譯

  #ifdef __IPHONE_7_0  class

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  

        self.window.tintColor = [UIColor redColor];  

    }  

  #endif  


這樣編譯經過就不會報錯了……這是由於在sdk6.1下的usr/include下邊有一個Availability.h文件,裏邊定義了一大堆宏,其中關於iphone的有

#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_NA      99999  /* not available */  


  在sdk7.0裏多了一個

  #define __IPHONE_7_0     70000  

相關文章
相關標籤/搜索