You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C中限制API仅在特定iOS版本区间可用?

在Objective-C中限制API仅在特定iOS版本区间可用

问题背景

在Swift中,我们可以通过@available属性精准限定API的可用版本区间,例如让某个方法仅在iOS 14.0到14.9.9之间可用:

@available(iOS, introduced: 14.0, obsoleted: 15.0)
@objc extension Foo {
    func foo(_ arg: AnyObject) {}
}

但在Objective-C中,尝试使用API_AVAILABLE(ios(14.0)) API_UNAVAILABLE(ios(15.0))的写法无效,因为API_UNAVAILABLE不支持带具体版本号的参数。如何在Objective-C中实现相同的版本区间限制逻辑?

解决方案

在Objective-C中,要实现这种精确版本区间的API限制,需要结合API_AVAILABLE和API_DEPRECATED_WITH_REPLACEMENT(或API_DEPRECATED)宏,具体写法如下:

方法一:使用API_DEPRECATED_WITH_REPLACEMENT

@interface Foo (FooCategory)
- (void)foo:(id)someId API_AVAILABLE(ios(14.0)) API_DEPRECATED_WITH_REPLACEMENT("", ios(15.0), ios(15.0));
@end
  • 第一个参数为替代API的名称,无替代方案时可传入空字符串
  • 后两个参数分别指定开始废弃的版本和完全移除的版本,均设为15.0即可模拟Swift中obsoleted:15.0的效果:API在iOS 14.0及以上可用,iOS 15.0及之后被废弃且不可用

方法二:简化使用API_DEPRECATED

如果不需要指定替代API,可直接使用API_DEPRECATED宏:

@interface Foo (FooCategory)
- (void)foo:(id)someId API_AVAILABLE(ios(14.0)) API_DEPRECATED("", ios(15.0), ios(15.0));
@end

设置完成后,当代码在iOS 15.0及以上版本中调用该方法时,编译器会触发废弃警告;若开启严格废弃检查,将直接报错,以此实现版本区间的限制。

内容的提问来源于stack exchange,提问作者Dmitry Katkevich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:05:52