Avaliability.h(譯)

 Availability.h

/*

 * Copyright (c) 2007-2009 by Apple Inc.. All rights reserved.

 *

 * @APPLE_LICENSE_HEADER_START@

 * 

 * 這個文件包含源碼或者在對於原代碼修改的定義,適用於蘋果共有資源許可第2.0版。

 * 你在使用此文件時必須遵守協議,請在http://www.opensource.apple.com/apsl/

 * 獲取協議的拷貝,在使用本文件之前閱讀它。

 * 

 * 源代碼和所有的軟件在協議下的發佈時遵守""AS IS"的原則的:沒有任何的警告,不包含任何的明示或者暗示,

 * 同時Apple特此聲明這一類的保證,包括不對出售的做任何的限制和保證。

 * 對於特定的用途,是不受干擾和侵權的。

 * 請在當前的協議下閱讀特定語言賦予的權力和限制

 * 

 * @APPLE_LICENSE_HEADER_END@

 */

 

#ifndef __AVAILABILITY__

#define __AVAILABILITY__

 /*     

    這些宏都是用在頭文件種。它們是作用於和系統版本有關的函數聲明或者函數,如果它們是可用的就標示它們首次有效的方法;或者被拋棄的函數。

     

    MAC OS IOS 有不同的版本號,OSX_AVALIABALE_STARTING()這個宏可以標識MAC OSIOS

    比如: _OSX_AVALABLE(_MAC_10_2,_IPHONE_2_0)表示這個函數可用的最低的版本是MAC OS X 10.2IOS 2.0.

    如果一個函數在一個平臺上可用,在另一個不可用,會加上_NA(not applicable)這個屬性。    

    比如: _OSX_AVALIBLE_STARTING(_MAC_10_3,_IPHONE_NA)標識最低可用於MAC OS的版本是

    MAC OS 10.3,在IOS平臺上不可用。

    有時,一個函數/方法被拋棄了。這表示蘋果推不推薦使用者再使用這個函數,或者有更好的替代的函數。

    被拋棄的方法/函數,可以被標記爲:

    _OSX_AVAILABLE_BUT_DEPRECATED()的宏,表示該函數/方法是可用的,但是也是被拋棄了的。

      比如說:

    _OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0,__MAC_10_5,__IPHONE_NA,__IPHONE_NA),表示在在MAC10.0的時候被引入了,

        在MAC 10.5的時候被拋棄了。在IOS平臺中這個函數是不可用的。

   爲了這些宏正常的使用,程序必須指定程序的系統版本。爲編譯器的指定最低的系統版本:當在MAC OS下編譯程序的時候,表示爲

     -mmacos-version-min = 10.x

     當在IOS下編譯程序的時候表示爲 -miphone-version-min=1.x.x。最高的編譯版本是很少需要,

     但是可以通過命令行:MAC OS 下形如,-D__MAC_OS_X_VERSION_MAX_ALLOWED=10xx  

  IOS下形如,__IPHONE_OS_VERSION_MAX_ALLOWED = 1xxx .


  例子:

        一個函數在MAC OS X 10.5及其以後版本可用,但是在IOS下是不可用的。

        extern void mymacfunc() __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);


        一個OC函數在MAC OS X 10.5及其以後版本可用,但是在IOS下是不可用的。

            @interface MyClass : NSObject           

            -(void) mymacmethod __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);           

           @end        一個枚舉變量在IOS 2.1及其以後版本可用,但是在MAC OS中是不可用的

         #if __IPHONE_OS_VERSION_MIN_REQUIRED >= 20100                enum { myEnum = 1 };            #endif

        筆記:這個枚舉在MAC OS平臺上是起作用的因爲

        __IPHONE_OS_VERSION_MIN_REQUIRED 沒有定義,這個值爲0,所以if 0>20100爲錯。同時,我們用20100代替 __IPHone_2_1是安全的,

        __IPHONE_2_1 2.1SDK以前的<Availability.h>中是不存在的。所以,用於以前的版本的時候,這將是不正確的。

        在源代碼中使用 *_VERSION_MIN_REQUIRED也是可能的,使某個源代碼在目標的系統下是可編譯的。最好是不要用

      _MAC_* __IPHONE_*宏來做比較,而是用他們的所定義的值。這是因爲在低版本的環境中沒用定義那個宏。

              在C 的預編譯中這個宏將表示爲0,這將導致在#if表達式中造成錯誤。

      #ifdef __MAC_OS_X_VERSION_MIN_REQUIRED

            // code only compiled when targeting Mac OS X and not iPhone

            // note use of 1050 instead of __MAC_10_5

            #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1050

                // 在這裏編寫適用於雪豹系統之前的版本的代碼

            #else

                // 在這裏編寫適用於雪豹系統之後的版本的代碼

            #endif

        #endif

       



*/


#define __MAC_10_0      1000

#define __MAC_10_1      1010

#define __MAC_10_2      1020

#define __MAC_10_3      1030

#define __MAC_10_4      1040

#define __MAC_10_5      1050

#define __MAC_10_6      1060

#define __MAC_NA        9999  /* not available */


#define __IPHONE_2_0     20000  

#define __IPHONE_2_1     20100  

#define __IPHONE_2_2     20200  

#define __IPHONE_3_0     30000  

#define __IPHONE_NA      99999 /* not available */


#include<AvailabilityInternal.h>



#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED

    #define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_iphone

    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) \

                                                    __AVAILABILITY_INTERNAL##_iphoneIntro##_DEP##_iphoneDep


#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)

    #define __OSX_AVAILABLE_STARTING(_mac, _iphone) __AVAILABILITY_INTERNAL##_mac

    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) \

                                                    __AVAILABILITY_INTERNAL##_macIntro##_DEP##_macDep


#else

    #define __OSX_AVAILABLE_STARTING(_mac, _iphone)

    #define __OSX_AVAILABLE_BUT_DEPRECATED(_macIntro, _macDep, _iphoneIntro, _iphoneDep) 

#endif



#endif/* __AVAILABILITY__ */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章