referencias paginas normativa normas libros libro ejemplos ejemplo bibliograficas bibliografia apa objective-c ios5 automatic-ref-counting xcode4.2

objective-c - paginas - referencias bibliograficas



Algunas preguntas sobre el conteo automático de referencias en iOS5 SDK (5)

Si decido actualizar a iOS 5, ¿necesito eliminar todas las declaraciones [myObject retain] y [myObject release] de mi código?

Sí, pero XCode 4.2 incluye una nueva herramienta "Migrar a Objective-C ARC" (en el menú Editar-> Refactorizar), que hace eso por usted. Llamar a dealloc es una historia diferente. Como se menciona en los comentarios, la referencia clang indica que debe mantener su método dealloc:

Justificación: aunque ARC destruye las variables de instancia automáticamente, todavía hay razones legítimas para escribir un método dealloc, como liberar recursos no retenibles. No llamar a [super dealloc] en un método así es casi siempre un error.

Habilita ARC utilizando un nuevo indicador de compilador de arco -fobjc. ARC es compatible con Xcode 4.2 para Mac OS X v10.6 y v10.7 (aplicaciones de 64 bits) y para iOS 4 e iOS 5. (Las referencias débiles no son compatibles con Mac OS X v10.6 e iOS 4). No hay soporte ARC en Xcode 4.1.

-

Si desarrollo una nueva aplicación para iOS 5 usando ARC, ¿tendré que implementar algún tipo de verificación de "compatibilidad retro"? Es decir: ¿tendré que verificar la versión de iOS y llamar a retener y liberar en consecuencia? Entonces, básicamente, ¿ARC está disponible para todas las versiones de iOS o solo para iOS 5?

No, porque ARC hace su magia en tiempo de compilación y no en tiempo de ejecución.

En lugar de tener que recordar cuándo usar retener, liberar y liberar automáticamente, ARC evalúa los requisitos de vida de sus objetos y automáticamente inserta las llamadas de método apropiadas para usted en el momento de la compilación. El compilador también genera los métodos de dealloc apropiados para usted.

Más información sobre ARC: http://clang.llvm.org/docs/AutomaticReferenceCounting.html

Actualmente estoy desarrollando una aplicación para iPad. El desarrollo comenzó para iOS 4.2 y ahora continúa (y creo que se completará) para iOS 4.3. Acabo de leer sobre ARC en iOS 5, y básicamente comprendí que nunca más tendremos que liberar y retener objetos. Mis preguntas son:

  1. Si decido actualizar a iOS 5, ¿necesito eliminar todas las declaraciones [myObject retain] y [myObject release] de mi código?

  2. Si desarrollo una nueva aplicación para iOS 5 usando ARC, ¿tendré que implementar algún tipo de verificación de "compatibilidad retro"? es decir: ¿tendré que verificar la versión de iOS y llamar retener y liberar en consecuencia? Entonces, básicamente, ¿ARC está disponible para todas las versiones de iOS o solo para iOS 5?


Por lo que yo entiendo y en cuanto a que mi iPhone / iPod con iOS 5 y iOS 4.3 funcionan, todo es bastante automático. Una aplicación que comencé para 4.0 y "actualicé" para trabajar con Xcode para iOS 5.0 nunca arroja ningún tipo de advertencia a mi manera de liberar y retener, aunque está en todas partes, etc. Sin embargo, parte del mismo código que inserté (copió el archivo) en un nuevo proyecto creado con Xcode para iOS 5 tiene muchas, muchas advertencias. Por lo tanto, parece que no tiene que eliminar todas esas llamadas, y no, de alguna manera lo adapta automáticamente para versiones anteriores. Perfilando mi iPod, no veo pérdidas de memoria u otros signos de fallas en el desglose / liberación. ¿Esto ayuda?


Q1: NO, si tiene un código existente, puede seguir utilizándolo tal como está con -fno-objc-arc , puede desactivar selectivamente ARC en cualquier archivo.

Si desea deshabilitar ARC en archivos MÚLTIPLES :

  1. Seleccione los archivos deseados en Target / Build Phases / Compile Sources en Xcode
  2. PRESIONAR ENTER . (Hacer doble clic selecciona solo un archivo)
  3. Tipo -fno-objc-arc
  4. Presione Enter o Done

Q2: NO, el objetivo puede ser tan bajo como iOS 4.0


Respecto a esta parte de tu pregunta

Si desarrollo una nueva aplicación para iOS 5 usando ARC, ¿tendré que implementar algún tipo de verificación de "compatibilidad retro"? Es decir: ¿tendré que verificar la versión de iOS y llamar a retener y liberar en consecuencia? Entonces, básicamente, ¿ARC está disponible para todas las versiones de iOS o solo para iOS 5?

Cabe señalar que el compilador iOS 5 toma la "retro-compatibilidad" (en realidad ADMITE el código para hacer el trabajo retener / liberar, esencialmente), pero si no está compilando para iOS 5.0, no puede usar weak como un palabra clave. En cambio, usas assign . Esto es desafortunado: weak es una gran ventaja (¡no hay indicadores colgantes, nunca!). Vea mi pregunta here para una discusión sobre weak , assign y ARC.


Si puede deshabilitar ARC al no usar el nuevo indicador de compilador -fobjc-arc, entonces no está obligado a volver a escribir el código avanzando, supongo (?)