Como Kevin indica, si está utilizando ARC en cualquier punto de su proyecto de biblioteca estática, solo será compatible con el compilador LLVM 3.0 y posteriores.
Sin embargo, si desea crear un marco que utiliza el recuento de referencias manual, pero que se puede utilizar en proyectos ARC habilitados y es compatible con compiladores anteriores, es posible que deba configurar algunas definiciones del compilador. Tuvimos que hacer esto para el marco del Diagrama central a fin de que los encabezados para ese marco sean compatibles en todos los proyectos ARC y no ARC generados utilizando una variedad de compiladores y objetivos.
Para ello, me sacó de Ryan Petrich de ZWRCompatibility, que describe en su respuesta here, y ensamblaron A continuación se definen:
#if TARGET_OS_IPHONE && defined(__IPHONE_5_0) && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0) && __clang__ && (__clang_major__ >= 3)
#define CPT_SDK_SUPPORTS_WEAK 1
#elif TARGET_OS_MAC && defined(__MAC_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_7) && __clang__ && (__clang_major__ >= 3)
#define CPT_SDK_SUPPORTS_WEAK 1
#else
#define CPT_SDK_SUPPORTS_WEAK 0
#endif
#if CPT_SDK_SUPPORTS_WEAK
#define __cpt_weak __weak
#define cpt_weak_property weak
#else
#if __clang__ && (__clang_major__ >= 3)
#define __cpt_weak __unsafe_unretained
#else
#define __cpt_weak
#endif
#define cpt_weak_property assign
#endif
Esto permite referirse a variables que no son retenidas (asignados) de instancia como lo siguiente:
__cpt_weak CPTAnnotationHostLayer *annotationHostLayer;
con la definición de la propiedad coincidente
@property (nonatomic, readwrite, cpt_weak_property) __cpt_weak CPTAnnotationHostLayer *annotationHostLayer;
Para los destinos de iOS 5.0 y Lion utilizando el compilador LLVM 3.0, esto hace que estas propiedades utilicen el calificador __weak
más seguro. Para iOS 4.0 y Snow Leopard bajo LLVM Compiler 3.0, esto se convierte en __unsafe_unretained
. Finalmente, para cualquier otro compilador, el calificador está en blanco y la propiedad se establece en assign
.
retain
puede usarse para propiedades sin mucho problema en todos los compiladores.
Ah, como una nota adicional, enviaré bibliotecas estáticas. Creo que todo debería estar bien, porque estoy compilando usando Clang. Todo lo que tendré que hacer es asegurarme de que uso retener en mis archivos de encabezado. ¿Pensamientos? – jimothy
@jimothy: a menos que tenga una muy buena razón para apoyar a GCC, diría que solo debe requerir Clang. –