8

Ho un'app con codice ARC e codice non ARC. Il compilatore prenderà quando cerco di compilare un codice non ARC come ARC. Come posso causare un errore/avviso di compilazione quando il mio codice ARC è compilato erroneamente senza ARC? Ovviamente, il codice verrà compilato. Sarà solo una perdita. L'analizzatore statico coglierà il problema. Preferirei trovare un modo per lasciare un pragma o definire nel mio codice ARC.Come richiedere l'ARC in una classe?

Il seguente è definito da Apple nel objc-api.h:

/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ 
#if !defined(OBJC_ARC_UNAVAILABLE) 
# if __has_feature(objc_arr) 
#  define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 
# else 
#  define OBJC_ARC_UNAVAILABLE 
# endif 
#endif 

My C-macro-fu è debole. Come lo userei? O forse c'è un simbolo migliore da controllare?

P.S. Lo chiedo perché costruisco gran parte della mia app da librerie riutilizzabili. Voglio assicurarmi che ogni file sia compilato nel modo giusto.

risposta

9

Il seguente dovrebbe funzionare:

#if !__has_feature(objc_arc) 
# error Compile me with ARC, please! 
#endif 

posto nella parte superiore del file.

+0

Grazie per la macro. – adonoho

-1

Se si tratta di un file completo, è consigliabile aggiungere -fno-objc-arc ai flag del compilatore per utilizzare il compilatore non arc.

Utilizzare la macro per compilare "parti" di codice con il compilatore non arc. ad esempio, utilizzare questo se si sta scrivendo un framework che verrà utilizzato in entrambe le basi di codice arc e non arc e write release, dealloc all'interno di questo blocco macro

+0

Mugunth, come Xcode moderno, v4.2 +, consente l'uso misto di codice ARC e non ARC in un progetto e ARC supporta le app di nuovo su iOS v4.0, preferisco evitare il percorso macro e spostare semplicemente il file su ARC come Aggiungo nuove funzionalità La chiave è garantire che questo cambiamento venga propagato man mano che le nuove versioni delle app di my e my client vengono riviste. La macro sopra fa questo. Grazie per il tuo commento, pensiero e tempo. Andrea – adonoho

Problemi correlati