8

Tengo una aplicación con código ARC y código que no es ARC. El compilador captará cuando intente compilar código que no sea ARC como ARC. ¿Cómo causo un error/aviso de tiempo de compilación cuando mi código ARC se compila erróneamente sin ARC? Obviamente, el código compilará. Simplemente se escapará. El analizador estático detectará el problema. Prefiero encontrar una manera de dejar un pragma o definir en mi código ARC.¿Cómo se requiere ARC en una clase?

La siguiente es definido por Apple en 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 

Mi C-macro-fu es débil. ¿Cómo lo usaría? O tal vez hay un mejor símbolo para verificar?

P.S. Lo pregunto porque construyo gran parte de mi aplicación en bibliotecas reutilizables. Quiero asegurarme de que cada archivo se compile de la manera correcta.

Respuesta

9

El siguiente debería funcionar:

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

colocarlo en la parte superior de su archivo.

+0

Gracias por la macro. – adonoho

-1

Si es un archivo completo, recomendaría agregar -fno-objc-arc a los indicadores del compilador para usar el compilador que no es de arco.

Utilice la macro para compilar "partes" de código con el compilador no de arco. por ejemplo, utilice esto si está escribiendo un marco que se usará en bases de código tanto de arco como de no arco y libere escritura, deallocs dentro de este macrobloque

+0

Mugunth, como el moderno Xcode, v4.2 +, permite código ARC y no ARC en un proyecto y ARC admite aplicaciones en iOS v4.0, prefiero evitar la ruta de macro y simplemente mover el archivo a ARC como Agrego nueva funcionalidad. La clave es garantizar que este cambio se propague a medida que se aceleran las nuevas versiones de las aplicaciones de mi y de mi cliente. La macro de arriba hace esto. Gracias por tu comentario, pensamiento y tiempo. Andrés – adonoho

Cuestiones relacionadas