【问题标题】:How to properly deprecate a method in Xcode 4如何正确弃用 Xcode 4 中的方法
【发布时间】:2012-04-23 10:17:03
【问题描述】:

我刚刚查看了here 的答案,但没有帮助。当我只在方法声明中添加不推荐使用的属性时,编译器会说Attributes on method implementation and its declaration must match。我需要在方法实现中添加 smth 吗?

谢谢!

【问题讨论】:

    标签: ios xcode xcode4 methods deprecated


    【解决方案1】:

    只需将属性添加到声明中:

    @interface Blah
    - (void)method __attribute__((deprecated));
    @end
    

    如果您的包含对翻译是正确的,这应该可以正常工作。也许您已将属性添加到定义,而不是声明?否则,演示(代码示例)会有所帮助。

    更新

    虽然上述方法适用于典型消息,但似乎 clang 与 IBActions 混淆了。

    使用 clang,ibaction 属性被隐式插入(对于以前的 typedef)。

    仅在声明中指定属性时,预处理器输出如下:

    // preprocessed declaration
    - (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn));
    // preprocessed implementation
    - (void)__attribute__((ibaction))setSomething:(id)sender
    ...    
    

    所以,编译器似乎只是被这种隐藏的装饰弄糊涂了,当方法是IBAction 时,您还必须将属性添加到实现/定义中以抑制警告。

    【讨论】:

    • - (IBAction)showTag __attribute__((deprecated));我明白了:方法实现的属性及其声明必须匹配。
    • @BorutTomazin 它显然是特定于IBActions -- 见更新。
    • 是的,你是对的。它适用于非 iaction 方法。谢谢!
    【解决方案2】:

    您必须将 deprecated 属性放在方法的声明和实现中,至少在带有 clang 的 Xcode 4.3.2 中。

    【讨论】:

    • 耸耸肩。我猜他们在 clang 中的实现方式与在 gcc 中的不同。
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2019-07-12
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多