#define __AVAILABILITY__
/*
这些宏都是用在头文件种。它们是作用于和系统版本有关的函数声明或者函数,如果它们是可用的就标示它们首次有效的方法;或者被抛弃的函数。
MAC OS 和_IOS_ 有不同的版本号,_OSX_AVALIABALE_STARTING()这个宏可以标识_MAC OS_和_IOS
比如: __OSX_AVALABLE(_MAC_10_2,_IPHONE_2_0)表示这个函数可用的最低的版本是_MAC OS X 10.2_和_IOS 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_*_宏来做比较,而是用他们的所定义的值。这是因为在低版本的环境中没用定义那个宏。
最后
由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
[外链图片转存中…(img-oDWFxP7o-1720086067255)]
[外链图片转存中…(img-qqXs9FWE-1720086067258)]