Basta aggiungere l'attributo alla dichiarazione:
@interface Blah
- (void)method __attribute__((deprecated));
@end
a condizione che il include siano corrette per la traduzione, questo dovrebbe funzionare bene. Forse hai aggiunto l'attributo alla definizione , non alla dichiarazione ? Altrimenti, una dimostrazione (esempio di codice) sarebbe d'aiuto.
Aggiornamento
Anche se l'approccio di cui sopra funziona per i messaggi tipici, sembra clang si confonde con IBAction
s.
Con clang, gli attributi ibaction
sono inseriti implicitamente (per quello che precedentemente era un typedef
).
Quando l'attributo è specificato nella dichiarazione unica, l'uscita del preprocessore è la seguente:
// preprocessed declaration
- (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn));
// preprocessed implementation
- (void)__attribute__((ibaction))setSomething:(id)sender
...
Così, sembra che il compilatore è solo confuso da questa decorazione nascosta, e si deve anche aggiungere l'attributo a l'implementazione/definizione per sopprimere l'avviso quando il metodo è un IBAction
.
Questo non funziona! –
Funziona sulla mia macchina;) Inserisci il tuo codice! – justin
- (IBAction) showTag __attribute __ ((deprecato)); Ho capito: gli attributi sull'implementazione del metodo e la sua dichiarazione devono coincidere. –