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:
Si decido actualizar a iOS 5, ¿necesito eliminar todas las declaraciones
[myObject retain]
y[myObject release]
de mi código?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 :
- Seleccione los archivos deseados en Target / Build Phases / Compile Sources en Xcode
- PRESIONAR ENTER . (Hacer doble clic selecciona solo un archivo)
- Tipo -fno-objc-arc
- 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 (?)