2012-04-11 10 views

Respuesta

13

Sólo tiene que añadir el atributo en la declaración:

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

incluye siempre y cuando su son correctos para la traducción, esto debería funcionar bien. Tal vez haya agregado el atributo a la definición , no la declaración ? De lo contrario, una demostración (muestra de código) ayudaría.

actualización

Aunque el enfoque anterior funciona para los mensajes típicos, parece sonido metálico se confunde con IBAction s.

Con clang, los atributos ibaction están implícitamente insertados (por lo que anteriormente era un typedef).

Cuando se especifica el atributo en la declaración única, la salida del preprocesador es la siguiente:

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

Por lo tanto, parece que el compilador está confundido por esta decoración oculto, y también debe agregar el atributo de la implementación/definición para suprimir la advertencia cuando el método es IBAction.

+0

¡Esto no funciona! –

+0

Funciona en mi máquina;) Publique su código! – justin

+0

- (IBAction) showTag __attribute __ ((obsoleto)); Entiendo esto: los atributos en la implementación del método y su declaración deben coincidir. –

0

Debe poner el atributo en desuso tanto en la declaración como en la implementación del método, al menos en Xcode 4.3.2 con clang.

+0

Eso es correcto. ¿Pero por qué? –

+0

encogimiento de hombros. Supongo que lo implementaron de manera diferente en clang que en gcc. –