Come contrassegnare una funzione come obsoleta in un file di intestazione iOS Objective-C?

StackOverflow https://stackoverflow.com/questions/1443599

Domanda

Come contrassegnare una funzione come obsoleta in un file di intestazione Objective-C iOS?

Suppongo che ci sia solo qualche parola chiave che posso applicare dopo la funzione da qualche parte?

Vorrei che venisse generato un avviso del compilatore se qualcuno tentasse di utilizzare la funzione obsoleta, in modo simile al comportamento riscontrato nelle API di Apple.

È stato utile?

Soluzione

Prova ad aggiungere un attributo alla dichiarazione del tuo metodo:

- (void)fooBar __attribute__ ((deprecated));

Tratto da qui .

Altri suggerimenti

La risposta di Tim produrrà effettivamente un avviso del compilatore; le altre versioni sono solo commenti che non hanno alcun effetto w.r.t. il compilatore.

Se guardi /usr/include/AvailabilityMacros.h, vedrai come lo fa Apple. Tale intestazione utilizza __attribute__((deprecated)) e __attribute__((unavailable)) a seconda che l'API sia presente ma obsoleta o sia stata effettivamente rimossa dal sistema operativo.

Invece di __attribute__((deprecated)), puoi utilizzare le macro definite in <cdefs.h>:

- (void)fooBar __deprecated;
// Or better:
- (void)fooBar __deprecated_msg("Use barFoo instead.");

Oppure puoi usare le macro definite in <AvailabilityMacros.h>:

- (void)fooBar DEPRECATED_ATTRIBUTE;
// Or better:
- (void)fooBar DEPRECATED_MSG_ATTRIBUTE("Use barFoo instead.");

Se usi Objective-C, non fa alcuna differenza poiché stai per utilizzare un compilatore moderno, quindi puoi scegliere la sintassi breve di Apple __deprecated_msg(). Ma se usi C per multipiattaforma, allora DEPRECATED_MSG_ATTRIBUTE() usa le definizioni di disponibilità ottimale (per esempio, supporta GCC3.1).

Da SFAuthorization.h di Apple:

/*!
DEPRECATED: Use obtainWithRight:flags:error:
@method permitWithRight:flags:
@abstract Call permitWithRight to gain a right to have
          access to a privilege operation.
@param rightName The name of an authorization right.
@param flags Authorization flags.
*/
- (OSStatus)permitWithRight:(AuthorizationString)rightName
                      flags:(AuthorizationFlags)flags;

Se non si utilizza un generatore di documentazione automatizzato, direi che una cosa del genere è sufficiente:

- (void)doSomething;           /* DEPRECATED */

Puoi anche seguire il HeaderDoc manuale . Dove viene utilizzata questa sintassi:

/*!
 * @abstract Foo is good for bar.
 *
 * @deprecated in version 2.0
 */
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top