Je fais partie d'une équipe qui développe une application iPad assez volumineuse et nous avons créé de nombreuses classes différentes à la suite. Le problème est que certaines des méthodes sont maintenant à peu près obsolètes et je ne veux pas simplement les supprimer car je sais que certaines parties du système global utilisent les méthodes ... mais il existe de meilleures (plus récentes) variantes qui devraient être utilisées au lieu de cela (certains des anciens appellent en réalité les nouveaux, mais l’interface globale de la classe est en désordre).
Existe-t-il un moyen de marquer certaines méthodes comme amorties (comme @deprecated
in Java et [Obsolete]
en .NET).
Je vois que Apple utilise Availability.h et que des balises telles que
__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_3_0);
... est-ce la seule façon de le faire (+ est-il sécuritaire de le faire sur l'App Store?) ou existe-t-il des alternatives qui signaleraient un avertissement dans Xcode?
La syntaxe est fournie pour marquer les méthodes comme étant déconseillées:
@interface SomeClass
-method __attribute__((deprecated));
@end
ou:
#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE; // or some other deployment-target-specific macro
@end
IMHO, il est plus facile d'écrire __deprecated:
- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;
Fonctionne aussi sur les cours
__deprecated
@interface MyDeprecatedClass
// ... some properties and methods ...
@end
Si vous souhaitez attribuer un message supplémentaire avec l'indicateur de désapprobation, vous pouvez utiliser les indicateurs suivants.
@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.")));
En utilisant les indicateurs mentionnés ci-dessus, vous pouvez dire pourquoi vous déconseillez ou ce que la méthode devrait utiliser à l’avenir.
Pour marquer une méthode comme obsolète, utilisez __ attribut __ ((obsolète ("Votre message va ici")))))
Un exemple pratique, 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
Utilisez l'attribut deprecated
:
- (int)bar: (int)x __attribute__((deprecated));