__attribute__ ((desaprobado)) no funciona en los methods de protocolo objective-c?

Necesito desaprobar un solo método en el protocolo objective-c. En los methods normales de class / instancia, agrego __attribute__ ((deprecated)); despues de declaracion

Parece que no funciona en los methods de protocolo. Si los marca en desuso y los uso en algún lugar, el proyecto comstack correctamente, sin la advertencia de desaprobación esperada.

¿Es un defecto en Apple LLVM 3.1, o estoy haciendo algo mal?

Aunque las respuestas aquí brindan muy buena información, están desactualizadas. A partir de Xcode 5.0 y LLVM 5.0 parece que se reconocen las advertencias de desaprobación para los methods de protocolo Objective-C. Al implementar el método, Xcode 5 lo señala:

Advertencia: implementación del método en desuso

Estos son los pasos que usé para generar una advertencia de desaprobación para la implementación de un método de protocolo en desuso:

  1. Marque el método de protocolo como en desuso utilizando __deprecated . De la nueva documentation de SDK 7.0:

    __deprecated causes el comstackdor produzca una advertencia al encontrar el código que usa la funcionalidad en desuso. __deprecated_msg() hace lo mismo y los comstackdores que lo respaldan imprimirán un post junto con la advertencia de desaprobación. Esto puede requerir encender dicha advertencia con el indicador -Wdeprecated . __deprecated_enum_msg() debe usarse en enums, y los comstackdores que lo apoyen imprimirán la advertencia de desaprobación.

     #define __deprecated __attribute__((deprecated)) 

    Para desaprobar su método, haga algo como esto:

     - (void)aDeprecatedProtocolMethod __deprecated; 

    Esto solo debería ser suficiente para que Xcode muestre una advertencia de desaprobación. Sin embargo, debe seguir los siguientes pasos (sabiendo que Xcode puede ser muy complicado a veces) para garantizar que se muestren las advertencias.

  2. Agregue un comentario de documentation con una label de advertencia de desaprobación. Vea el ejemplo del código a continuación para aprender cómo:

     /** Describe the method here - what does it do, how does it work, etc. Very brief. @deprecated This delegate method is deprecated starting in version 2.0, please use otherMethodNameHere:withAnExtraParameter: instead. */ - (void)aDeprecatedProtocolMethod __deprecated; 
  3. Limpie el proyecto ( + + K ) y luego Genere el proyecto ( + B ), simplemente porque Xcode puede ser funky a veces.

No estoy 100% seguro cuándo o dónde se introdujo esta característica (tal vez con SDK 7.0 y 10.9, o Xcode 5.0 / 5.0.1, o con LLVM 5.0), pero funciona, no obstante.

Bueno, acabo de __attribute__((deprecated)) count de que incluso Apple usa __attribute__((deprecated)) al final. Y tampoco funciona. Si uso algún método de delegado en desuso, ej.

 - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath 

no hay advertencia

Entonces parece un candidato para el radar.

EDITAR: archivó un radar, Bug ID # 11849771.

Apple desaprobó algunos methods en el protocolo UITableViewDelegate, tal vez pueda encontrar la solución usando el código de Apple como ejemplo.

El código relevante del protocolo es el siguiente:

 - (UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0); 

Como puede ver, Apple usa una macro. Tal vez este es el path a seguir?

EDITAR: Como se indica en el siguiente enlace [1] __attribute__((deprecated)) es una construcción de GCC, por lo que es posible que esto no funcione en LLVM. Supongo que esta es la razón por la que Apple usa macros, por lo que se llamará a otra construcción de desaprobación (o no) cuando se utilicen otros comstackdores.

[1] Cómo desaprobar un método en Xcode