iphone - ¿Cómo señalo un método como obsoleto en Objective-C 2.0?
deprecated (5)
Soy parte de un equipo que desarrolla una aplicación iPad bastante grande y, como resultado, hay muchas clases diferentes que hemos creado. El problema es que algunos de los métodos ahora son bastante obsoletos y no quiero simplemente eliminarlos aún, ya que sé que algunas partes del sistema general usan los métodos ... pero hay mejores variantes (más nuevas) disponibles que deberían usarse en su lugar (algunos de los antiguos realmente llaman a los nuevos, pero la interfaz de clase general se está volviendo desordenada).
¿Existe alguna manera de marcar ciertos métodos como depreciados (como @deprecated
en Java y [Obsolete]
en .NET)?
Veo que Apple usa Availability.h y tiene etiquetas como
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
... ¿es esta la única forma de hacerlo? (¿es seguro usar App Store para hacer esto?) o hay alternativas que marcarán una advertencia en Xcode?
Sintaxis de depreciación
La sintaxis se proporciona para marcar los métodos como obsoletos:
@interface SomeClass
-method __attribute__((deprecated));
@end
o:
#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE; // or some other deployment-target-specific macro
@end
En mi humilde opinión, es más fácil escribir __deprecated:
- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;
Funciona también en las clases
__deprecated
@interface MyDeprecatedClass
// ... some properties and methods ...
@end
Para marcar un método como obsoleto, use __attribute __ ((deprecated ("Su mensaje va aquí")))
Un ejemplo práctico, de Mantle
@interface NSValueTransformer (UnavailableMTLPredefinedTransformerAdditions)
+ (NSValueTransformer *)mtl_externalRepresentationTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONDictionaryTransformerWithModelClass:")));
+ (NSValueTransformer *)mtl_externalRepresentationArrayTransformerWithModelClass:(Class)modelClass __attribute__((deprecated("Replaced by +mtl_JSONArrayTransformerWithModelClass:")));
@end
Si desea dar un mensaje adicional con el indicador de desaprobación, puede usar los siguientes indicadores.
@property (strong, nonatomic) NSString *catName
__deprecated_msg("use name instead.");
// -- Or --
@property (strong, nonatomic) NSString *catName
DEPRECATED_MSG_ATTRIBUTE("use name instead.");
// -- Or --
@property (strong, nonatomic) NSString *catName
__attribute__((deprecated("use name instead.")));
Usando los indicadores mencionados anteriormente, puede decir por qué está desaprobando o cuál es el método que el desarrollador debería usar en el futuro.
Utilice el atributo deprecated
:
- (int)bar: (int)x __attribute__((deprecated));