Como programador principiante de iPhone, ¿cuál es la mejor práctica para escribir aplicaciones que se usarán con iOS 5 o versiones anteriores? Específicamente, ¿debo continuar usando la liberación / retención de datos, o debo ignorar eso? ¿Importa?
Como programador principiante de iPhone, ¿cuál es la mejor práctica para escribir aplicaciones que se usarán con iOS 5 o versiones anteriores? Específicamente, ¿debo continuar usando la liberación / retención de datos, o debo ignorar eso? ¿Importa?
Respuestas:
Tu decides. Puede escribir aplicaciones usando ARC (Recuento automático de referencias), y Xcode escribirá "código de pegamento" para permitir que sus aplicaciones habilitadas para ARC se ejecuten en iOS 4, sin necesidad de modificaciones. Sin embargo, ciertas cosas no funcionarán, y lo más notable es que muchas bibliotecas que podría desear usar arrojarán (a veces) innumerables errores y no podrá usarlas hasta que los desarrolladores publiquen una actualización que sea compatible con ARC.
Editar : Recientemente descubrí que puede desactivar ARC por archivo. Vea la respuesta de pixelfreak . Por lo tanto, mi consejo sigue en pie, pero ahora las bibliotecas de terceros no deberían tener que actualizarse para funcionar con ARC.
Esto es lo que dice Apple sobre la exclusión voluntaria de ARC para archivos específicos:
Cuando migra un proyecto para usar ARC, la marca del compilador -fobjc-arc se establece como predeterminada para todos los archivos fuente de Objective-C. Puede deshabilitar ARC para una clase específica usando la marca del compilador -fno-objc-arc para esa clase. En Xcode, en la pestaña Fases de compilación de destino, abra el grupo Compilar fuentes para revelar la lista de archivos fuente. Haga doble clic en el archivo para el que desea establecer la bandera, ingrese -fno-objc-arc en el panel emergente, luego haga clic en Listo.
Consulte la guía de transición completa aquí .
-fno-objc-arc
JSONKit
, por ejemplo. Intente ejecutar eso a través de la verificación ARC. Verás lo que quiero decir. ;)
Para cualquiera que todavía tenga curiosidad sobre cómo desactivar ARC en archivos individuales, esto es lo que hice:
Build Phases > Compile Sources
No sé si esta es la forma recomendada, pero me funciona.
PD: Recopilé esta información de clang.llvm.org aquí, que es de acceso público, por lo tanto, no bajo NDA.
iOS 5 todavía está bajo un NDA, y probablemente lo estará hasta que publiquen la versión pública. Si tiene una cuenta de desarrollador, diríjase a los foros de desarrolladores de Apple y pregunte allí.
Para versiones anteriores, debe contar las referencias y retener y publicar en consecuencia. Consulte la guía de administración de memoria .
Editar: Aquí hay una especificación pública para el recuento automático de referencias y una cita del página pública de iOS 5 :
El conteo automático de referencias (ARC) para Objective-C hace que la administración de la memoria sea el trabajo del compilador. Al habilitar ARC con el nuevo compilador LLVM de Apple, nunca más necesitará escribir retener o liberar, lo que simplifica drásticamente el proceso de desarrollo y reduce los bloqueos y las pérdidas de memoria. El compilador tiene una comprensión completa de sus objetos y libera cada objeto en el instante en que ya no se usa, por lo que las aplicaciones se ejecutan tan rápido como siempre, con un rendimiento predecible y fluido.
Los detalles son livianos / bajo NDA por el momento, pero Apple ha implementado el Conteo de referencia automático (ARC) en iOS 5, como se detalla aquí: http://developer.apple.com/technologies/ios5/
Si desarrolla una nueva aplicación en Xcode 4 con el SDK de iOS 5, puede ignorar con seguridad el conteo de retenciones / liberaciones.
[editar] sudo rm -rf tiene un buen punto; las bibliotecas de terceros pueden verse significativamente afectadas
Nadie mencionó SystemConfiguration.framework ? No olvide ponerlo en Frameworks . Pasé varias horas miserablemente para darme cuenta.
Sin duda, es la elección del desarrollador o del equipo. ARC (Automatic Reference Counter) ha facilitado un poco las cosas al administrar automáticamente la memoria por usted. Liberará, retendrá y desasignará cuando sea apropiado. Creo que debería adquirir experiencia administrando la memoria usted mismo, preferiblemente en una aplicación de prueba, si aún no lo ha hecho. Otra cosa a considerar es si su aplicación se basa en bibliotecas de terceros, que si no se convierten a ARC evitarán que su aplicación se compile. La elección depende obviamente de la situación actual.
establecer la bandera como -fno-objc-arc en la configuración del proyecto> Fases de compilación> Compilar fuentes