149 votes

Comment puis-je signaler une méthode obsolète en Objective-C 2.0?

Je fais partie d'une équipe qui développe un assez grand app pour iPad et il y a beaucoup de différentes classes que nous avons créés. Le problème est que certaines de ces méthodes sont maintenant presque obsolète et je ne veux pas simplement les supprimer mais comme je sais que certaines parties de l'ensemble du système d'utiliser les méthodes... mais il y a mieux (plus récente) des variantes disponibles qui doivent être utilisés à la place (certains des anciens fait appel de la nouvelle, mais l'ensemble de la classe de l'interface est de se salir).

Est-il un moyen dans lequel je peux marquer certaines méthodes comme déprécié (comme @deprecated en Java et [Obsolete] .NET).

Je vois que Apple utilise la Disponibilité.h et ont les tags

__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 de l'App Store coffre-fort pour cela?) ou il y a des alternatives qui vous indiquera un message d'avertissement dans XCode?

166voto

Shay Erlichmen Points 23645

La Dépréciation De La Syntaxe

La syntaxe est fourni pour marquer des méthodes comme obsolète:

@interface SomeClass
-method __attribute__((deprecated));
@end

ou:

#include <AvailabilityMacros.h>
@interface SomeClass
-method DEPRECATED_ATTRIBUTE;  // or some other deployment-target-specific macro
@end

137voto

vbergae Points 827

À mon humble avis, il est plus facile d'écrire __obsolète:

- (void)myDeprecatedMethod __deprecated;
- (int)methodNameDeprecated:(int)param __deprecated;

Fonctionne aussi sur les classes

__deprecated
@interface MyDeprecatedClass

  // ... some properties and methods ...

@end

94voto

uiroshan Points 454

Si vous voulez donner plus de messages avec l'abandon du pavillon, vous pouvez utiliser les options suivantes.

@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.")));

À l'aide mentionnée ci-dessus drapeaux, vous pouvez dire pourquoi vous êtes autodérision ou qu'est-ce que la méthode développeur doit utiliser dans l'avenir.

16voto

Stephen Canon Points 58003

Utiliser l' deprecated d'attribut:

- (int)bar: (int)x __attribute__((deprecated));

16voto

onmyway133 Points 2196

Pour marquer une méthode obsolète, utiliser __attribute__((déconseillé("Votre message ici")))

Un exemple concret, du Manteau

@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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X