iOSのバージョン別の適応問題(𞃳ifdef_IPHONE_7_0)

2913 ワード

部分参照http://www.cnblogs.com/ios8/p/ios-version-com.html
以下では、簡単な例を挙げて、iOS 7.0とiOS 6.1(およびより低いバージョン)との間の適応問題を説明する.
新しいプロジェクトは、デフォルトのdevelopment target、base sdk及びシミュレータのバージョンは全部7.0で、App DelegateのdidFinish Launching WithOptionsの方法に書いてください.
self.window.tintColor = [UIColor redColor];  
そして運行します.このように間違いはありません.これから
development target、base sdk及びシミュレータのバージョンは6.1に変更されました.そして運転したらエラーが発生します.
つまり、tintColor属性はiOS 6.1にはないです.コンパイルするときにエラーが発生します.この時は下のように判断文を加えても無駄です.やはりエラーを報告します.
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  
    self.window.tintColor = [UIColor redColor];  
} 
このような状況に遭遇した場合は、前処理文を加えて書くしかないです.
#ifdef __IPHONE_7_0  
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  
        self.window.tintColor = [UIColor redColor];  
    }  
#endif
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {  
        self.window.tintColor = [UIColor redColor];  
    }  
#endif
  __IPHONE_OS_VERSION_MAX_ALLOWED   usr/include/AvailabilityInternal.h 
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
/* make sure a default max version is set */
#ifndef __IPHONE_OS_VERSION_MAX_ALLOWED
        #define __IPHONE_OS_VERSION_MAX_ALLOWED     __IPHONE_7_0
    #endif
/* make sure a valid min is set */
    #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_2_0
        #undef __IPHONE_OS_VERSION_MIN_REQUIRED
        #define __IPHONE_OS_VERSION_MIN_REQUIRED    __IPHONE_2_0 
    #endif
。。。。
#endif
         #import 
            ……     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 */ 
sdk 7.0の中で1行多くなりました. 
#define __IPHONE_7_0 70000
iOS 8ももちろん同じです.
このほか、frame eworkまたは.aを使用する場合は注意が必要です.
frame ewarkまたは.aをコンパイルする際には、iOS 6のsdkを使用するとframe eworkまたは.aをスムーズにコンパイルすることができますが、appを生成する際には、コンパイルされたapを保証する必要があります.float Valueそれ)
説明:
1、もし低バージョンのsdkを使ってコンパイルされた場合(iOS 6など)、最終的なアプリケーションを最高のバージョンのデバイス(iOS 7のシステム)にインストールすると、問題が起こらないはずです.iOS 7はiOS 6に対応していますが、iOS 7特有の新しい機能は使えません.コードが遮断されていますので.
2、高バージョンのsdkを使ってコンパイルした場合(iOS 7など)、最終的なアプリケーションを低バージョンのデバイス(iOS 6のシステム)にインストールします.この場合、運行に参加しないと問題が発生すると判断します.アプリケーション自体はiOS 7でコンパイルしていますので、iOS 7ならではの新機能を使っていますが、デバイスはiOS 7をサポートしていません.
書いたのはちょっと乱れているかもしれません.自分で記録するためのものです.