我刚看过答案here但没有帮助。当我仅将一个不推荐使用的属性添加到方法声明时,而不是编译器说Attributes on method implementation and its declaration must match
。我是否需要在方法实现中添加smth?
谢谢!
答案 0 :(得分:13)
只需将属性添加到声明:
@interface Blah
- (void)method __attribute__((deprecated));
@end
如果您的包含对于翻译是正确的,这应该可以正常工作。也许您已将属性添加到定义,而不是声明?否则,演示(代码示例)会有所帮助。
<强>更新强>
虽然上述方法适用于典型的消息,但似乎clang与IBAction
混淆。
使用clang,隐式插入ibaction
属性(以前为typedef
)。
仅在声明中指定属性时,预处理器输出如下:
// preprocessed declaration
- (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn));
// preprocessed implementation
- (void)__attribute__((ibaction))setSomething:(id)sender
...
因此,看起来编译器只是被这个隐藏的装饰搞糊涂了,你还必须在实现/定义中添加属性以在方法为IBAction
时禁止警告。
答案 1 :(得分:0)
您必须将deprecated属性放在方法的声明和实现上,至少在带有clang的Xcode 4.3.2中。