6

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

谢谢!

4

2 回答 2

13

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

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

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

更新

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

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

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

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

因此,编译器似乎只是被这种隐藏的装饰弄糊涂了,您还必须将属性添加到实现/定义中以在方法为IBAction.

于 2012-04-11T07:01:00.363 回答
0

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

于 2012-04-11T06:45:09.173 回答