Joh*_*ane 2 iphone cocoa objective-c ios
是否可以拥有自定义可用性宏,例如__OSX_AVAILABLE_STARTING.我需要它以相同的方式执行,我只需要更改其名称和版本以及参数数量?
是的,当然了.Objective-C是C的严格超集,因此C宏非常适合您,并且该工具只是一组C宏,最终扩展为
gcc的__attribute__关键字以声明函数的特殊属性.
相关的声明都在
要刷新,可以使用__OSX_AVAILABLE_STARTING宏将函数声明标记为特定版本支持,如下所示:
extern void mymacfunc() __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_NA);
Run Code Online (Sandbox Code Playgroud)
那么我们自己需要做什么呢?如果你剥夺了对两种不同操作系统(mac,iphone)的支持,可用性设施归结为:
采用版本参数的宏,如__MY_AVAILABLE_STARTING(<version>):
#define __MY_AVAILABLE_STARTING(_myversion) __MY_AVAILABILITY_INTERNAL##_myversion
Run Code Online (Sandbox Code Playgroud)像上面那样的版本参数集Availability.h,它们是上面的有效参数:
#define __MYVER_2_0 20000
#define __MYVER_2_1 20100
#define __MYVER_2_2 20200
#define __MYVER_3_0 30000
Run Code Online (Sandbox Code Playgroud)另一组宏,如thos AvailabilityInternal.h,指定每个版本应该发生什么(常规支持,弃用,不可用,弱等).同样,这是编译器的一个功能,请参阅gcc docs(还有很多其他有趣的选项):
#define __MY_AVAILABILITY_INTERNAL__MYVER_2_0 __AVAILABILITY_INTERNAL_UNAVAILABLE
#define __MY_AVAILABILITY_INTERNAL__MYVER_2_1 __AVAILABILITY_INTERNAL_WEAK_IMPORT
#define __MY_AVAILABILITY_INTERNAL__MYVER_2_1 __AVAILABILITY_INTERNAL_REGULAR
Run Code Online (Sandbox Code Playgroud)最后,降压结束的地方,扩展到__attribute__设施的宏.
对于我上面的那些,你可以继续使用Apple的宏:
#define __AVAILABILITY_INTERNAL_DEPRECATED __attribute__((deprecated,visibility("default")))
#define __AVAILABILITY_INTERNAL_UNAVAILABLE __attribute__((unavailable,visibility("default")))
#define __AVAILABILITY_INTERNAL_WEAK_IMPORT __attribute__((weak_import,visibility("default")))
#define __AVAILABILITY_INTERNAL_REGULAR __attribute__((visibility("default")))
Run Code Online (Sandbox Code Playgroud)
或者,当然,您可以定义自己的疯狂.
C宏是强大的东西,经常被忽视.祝好运!
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |