2011-06-23 15 views
182

He descargado el iOS 5 SDK y he descubierto que ARC es una gran característica del nuevo compilador de Apple. Por el momento, muchos frameworks de terceros no son compatibles con ARC. ¿Puedo usar ARC para mi nuevo código y mantener el código actual de retención/liberación sin cambios? El convertidor ARC no funciona aquí, porque algunos frameworks, como JSONKit, no se pueden convertir a ARC utilizando el convertidor.Deshabilitar el recuento automático de referencias para algunos archivos

Editar:

La respuesta es añadir -fno-objc-arc a las opciones del compilador para los archivos que no desea ARC. En Xcode 4, puedes hacer esto debajo de tu objetivo -> Fases de compilación -> Compilar fuentes.

+2

Para aclarar, que acaba de añadir al archivo '.m'. No es el archivo '.h'. – ma11hew28

+10

[ARC está documentado públicamente en el sitio de LLVM.] (Http://clang.llvm.org/docs/AutomaticReferenceCounting.html) –

+0

Encontré esta conversación: https://github.com/gowalla/AFNetworking/issues/ 36 Tal vez ayude a alguien a integrar JSONKit en un proyecto compatible con iOS 5 ARC ;-) Pero no lo he intentado en este momento ... –

Respuesta

73

The public ARC docs, aunque no es claro directamente en este punto, parecen sugerir que, siempre que cada clase sea ARC o todas gestionadas manualmente, las clases se pueden integrar en un solo programa.

Usted no puede mezclar ARC y no ARC en una sola clase; el documento dice que enviar mensajes retain, release, autorelease, o retainCount por cualquier medio (incluidos los temporizadores y las ejecuciones retrasadas, que usan @selector) está prohibido en el código ARC. Por lo tanto, no puede hacer ARC que no sean en una clase ARC (porque los mensajes necesarios están prohibidos) y no puede hacer ARC en una clase que no sea ARC (porque ARC agrega elementos de sintaxis que no son válidos sin ARC).

El mismo documento es un poco más claro sobre si puede integrar bibliotecas/marcos que no sean ARC en un programa ARC: Sí. No menciona si puede usar bibliotecas/marcos ARC en un programa donde todo su código no es ARC, pero teniendo en cuenta todo lo anterior, la implicación parece ser sí.

+0

¡Gracias! He descubierto cómo deshabilitar ARC para las clases existentes que no son ARC. – nonamelive

+0

¿Podría compartir con nosotros lo que está haciendo? –

+1

@David H: Si tuviste la intención de dirigir eso al interrogador, debes tener en cuenta que el interlocutor editó su solución en la pregunta. –

35

Si desea deshabilitar el recuento automático de referencias para algunos archivos, entonces es realmente simple de seguir simplemente siga los pasos. Agregue indicadores de compilación en Destinos -> Fases de compilación -> Fuentes de compilación.

xcode

La bandera utilizada es -fno-objc arco pulse enter después de haberlo escrito.! Tiene que hacer doble clic en la columna de la derecha de la fila debajo de Indicadores del compilador. espero que ayude :) Gracias

+14

Puede usar el mismo método para ** habilitar ** ARC en un archivo específico en un proyecto que no sea ARC utilizando el indicador '-fobjc-arc'. – lnafziger

+0

La compilación ARC no se puede deshabilitar en archivos HEADER. Clang NO compilará la interfaz/encabezado en función de la compilación de su archivo de implementación/método. Por lo tanto, los archivos de encabezado deben ser compatibles con ARC y sin ARC en una compilación mixta. Veo esto como un error en el compilador. – carmin

76

no es muy intuitiva cómo deshabilitar la ARC en MÚLTIPLE archivos, por un tiempo yo era hacerlo uno por uno hasta un descubierto la manera de hacer eso.

  1. Seleccionar desear archivos en Target/Construir Fases/Fuentes de compilación en Xcode (CMD + clic o Mayús + clic)
  2. PRESS ENTER (doble clic se restablecerá la selección, por lo que does't trabajo)
  3. Tipo -fno-objc arco
  4. Pulse Intro o hecho
+1

No es realmente una respuesta a la pregunta que se hace aquí, ¡pero sí un buen consejo! Votado +1 –

+0

Tienes razón, no lo es, pero siempre busqué en Google el cambio y esta respuesta es una de las mejores. Pensé que en estos días la mayoría de la gente ya sabe la respuesta pero no este "consejo" – Tibidabo

0

Para desactivar ARC para las clases individuales que se necesitan para ir a construir Fases después de hacer clic en su proyecto Xcode y ampliar las secciones fuentes de compilación.

En el lado derecho, verá la opción de agregar indicadores de compilación para las clases específicas. El ajuste -fno-objc-arc para la clase desactivará ARC en él.

fuente: Disable Automatic Reference Counting with -fno-objc-arc

Cuestiones relacionadas