【问题标题】:Suppressing deprecation warning in Objective-C with @available使用 @available 抑制 Objective-C 中的弃用警告
【发布时间】:2020-02-05 19:09:37
【问题描述】:

鉴于 Objective-C 中的 @available 命令,我期待弃用警告会像在 Swift 中一样消失。 示例:

ABPerson *abPerson = [participant ABPersonInAddressBook:[ABAddressBook addressBook]];

'meetingAttendeeWithMeetingPlanner:andABPerson:' 已弃用:首先在 macOS 10.11 中弃用 - 使用联系人框架

使用@available 关闭我可以调节api 框架的使用,我的猜测是这会使警告静音,但事实并非如此。这是使用@available 命令的正确方法吗?如果是,有没有办法使警告静音?

if (@available(iOS 9, macOS 10.11, *)) {

}
else{
    ABPerson *abPerson = [participant ABPersonInAddressBook:[ABAddressBook addressBook]];
}

【问题讨论】:

  • 您可以使用编译指示消除弃用警告:stackoverflow.com/questions/14065844/…
  • 您的@available 方法在Swift 中有效吗?大概使用#available? AFAIK @available Objective C 中的关键字不看NS_DEPRECATED,只看NS_AVAILABLE,所以这不会像你一样工作。也许 Swift 不一样。
  • @TheNextman,是的,我正在使用#available 就像一个魅力!

标签: objective-c cocoa cocoa-touch deprecation-warning


【解决方案1】:
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
... the code using the deprecated API ...
#pragma clang diagnostic pop

【讨论】:

    【解决方案2】:

    Objective-C 中的@available 用于检查当前 iOS (/MacOS) 版本是否支持此 API。它在您实现某些 iOS 版本开始支持但旧 iOS 不支持的 API 时调用。

    据我所知,您不能对已弃用的 API 发出静默警告 - 您只能将其替换为新的。

    【讨论】:

    • “据我所知,您不能对已弃用的 API 发出静默警告 - 您只能将其替换为新的”-Wdeprecated-declarations
    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    • 2021-02-19
    • 2023-03-22
    相关资源
    最近更新 更多