2012-04-11 46 views
6

我剛剛看過答案here但沒有幫助。當我只爲方法聲明添加一個棄用的屬性時,編譯器會說Attributes on method implementation and its declaration must match。我是否需要爲方法實現添加smth?如何正確棄用Xcode 4中的方法

謝謝!

回答

13

只需將屬性添加到聲明:

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

提供您的包括是翻譯正確的,這應該能正常運行。也許您已將該屬性添加到定義,而不是聲明?否則,演示(代碼示例)會有所幫助。

更新

雖然上述方法也適用於典型的消息,似乎鐺獲取與IBAction小號混淆。

隨着clang,ibaction屬性被隱式插入(以前的內容爲typedef)。

當在聲明中指定的屬性只,預處理器輸出如下:

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

所以,它出現在編譯器只是這個隱藏裝飾糊塗了,你還必須將屬性添加到當方法是IBAction時,實現/定義將抑制警告。

+0

這不行! – 2012-04-11 07:05:22

+0

在我的機器上工作;)發佈您的代碼! – justin 2012-04-11 07:15:35

+0

- (IBAction)showTag __attribute __((不建議使用)); 我得到這個:方法實現的屬性和它的聲明必須匹配。 – 2012-04-11 07:49:55

0

您必須在方法的聲明和實現上放置棄用的屬性,至少在Xcode 4.3.2中使用clang。

+0

這是正確的。但爲什麼? – 2012-04-11 07:05:06

+0

聳聳肩。我想他們在clang中比在gcc中實現的方式不同。 – 2012-04-11 08:05:36

相關問題