Comment déprécier une méthode dans Xcode

Nous avons notre bibliothèque que nous livrons à nos clients, et je voudrais marquer certaines méthodes comme “obsolètes” parce que nous les avons modifiées (comme Apple le fait dans le SDK iPhone).

J’ai vu la macro de préprocesseur __OSX_AVAILABLE_BUT_DEPRECATED , qui est mappée sur __AVAILABILITY_INTERNAL , qui est mappée sur __atsortingbute__((deprecated))

Eh bien, je suis un peu confus avec ce genre de choses!

Quelqu’un sait quelque chose à ce sujet?

__atsortingbute__((deprecated)) est la méthode gcc (également prise en charge dans clang ) consistant à marquer une fonction / méthode comme obsolète. Quand on est marqué comme “obsolète”, un avertissement sera produit chaque fois que quelqu’un l’appelle.

La syntaxe des fonctions normales serait

 __atsortingbute__((deprecated)) void f(...) { ... } // gcc 4.5+ / clang __atsortingbute__((deprecated("g has been deprecated please use g2 instead"))) void g(...) { ... } 

et celle des méthodes Objective-C serait

 @interface MyClass : NSObject { ... } -(void)f:(id)x __atsortingbute__((deprecated)); ... @end 

Vous pouvez également marquer la classe entière comme déconseillée avec

 __atsortingbute__((deprecated)) @interface DeprecatedClass : NSObject { ... } ... @end 

Apple fournit également l’en-tête qui fournit les macros DEPRECATED_ATTRIBUTE et DEPRECATED_MSG_ATTRIBUTE (msg) qui développent les atsortingbuts ci-dessus, ou rien si le compilateur ne prend pas en charge les atsortingbuts. Notez que cet en-tête n’existe pas en dehors d’OS X / iOS.


Remarque: si vous utilisez Swift, vous utilisez l’ atsortingbut @available pour déprécier un élément, par exemple

 @available(*, deprecated=2.0, message="no longer needed") func f() { ... } 

Vous pouvez également utiliser des définitions plus lisibles DEPRECATED_ATTRIBUTE

Il a défini dans usr/include/AvailabilityMacros.h :

 #define DEPRECATED_ATTRIBUTE __atsortingbute__((deprecated)) #define DEPRECATED_MSG_ATTRIBUTE(msg) __atsortingbute((deprecated((msg)))) 

Exemple de méthodes Objective-C :

 @interface MyClass : NSObject { ... } -(void)foo:(id)x DEPRECATED_ATTRIBUTE; // If you want to specify deprecated message: -(void)bar:(id)x DEPRECATED_MSG_ATTRIBUTE("Use baz: method instead."); ... @end 

Vous pouvez également marquer la classe entière comme étant obsolète:

 DEPRECATED_ATTRIBUTE @interface DeprecatedClass : NSObject { ... } ... @end 

Si vous utilisez C ++ 14 dans votre projet xcode, vous pouvez également utiliser l’atsortingbut [[deprecated]] ou [[deprecated("reason")]] qui fait maintenant partie du langage.

voir la documentation: http://fr.cppreference.com/w/cpp/language/atsortingbutes