检测头文件中的协议可用性 - Objective-C

Detect protocol availability in header file - Objective-C

我已经下载了 XCode 8.2 beta 并且为了修复项目上的警告我必须添加以下内容 protocolheader file: CAAnimationDelete 只能从 iOS 10.

问题是,仅通过添加协议,项目无法在 10 之前的 iOS versions 上编译,因此我添加了以下检查:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_3
@interface CheckTest : UIView <CAAnimationDelegate>
#else
@interface CheckTest : UIView
#endif

这是正确的方法吗?

我相信你对守卫宏的使用是正确的,只有一个小改动;你想检查你是否正在编译 iOS 10+,所以在宏中测试它:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
@interface CheckTest : UIView <CAAnimationDelegate>
#else
@interface CheckTest : UIView
#endif

不要忘记使用相同的保护宏保护 CAAnimationDelegate 方法实现。

如果您在很多 类 中执行此操作,那么在您的预编译头文件中执行此操作可能更方便:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10
#define VIEWS_USE_CAANIMATIONDELEGATE 1
#else
#define VIEWS_USE_CAANIMATIONDELEGATE 0
#endif

并将守卫宏更改为:

#if VIEWS_USE_CAANIMATIONDELEGATE
@interface CheckTest : UIView <CAAnimationDelegate>
#else
@interface CheckTest : UIView
#endif