2011-12-17 16 views
9

De acuerdo con Apple's ARC Documentation, hay un número bastante significativo de cambios en la forma en que uno desarrolla el software cuando usa ARC.Comenzando con Objective-C: ¿ARC o no a ARC?

Como un principiante completo de Objective-C, ¿sería mejor comenzar con ARC deshabilitado, con la idea de que me daría una mejor comprensión de bajo nivel de lo que está sucediendo detrás de escena? ¿O ARC esencialmente ha desaprobado la "vieja forma" de hacer las cosas, hasta el punto de que realmente no vale la pena perder tiempo aprendiendo?

+0

Gracias por todas las respuestas, ¡todas son muy útiles! –

+0

Cuando se formuló por primera vez esta pregunta, había buenas razones para vacilar en la decisión. Pero ARC ya está establecido, y prácticamente todos los ejemplos de código (de origen reciente) que encuentre en la web asumirán ARC. Simplemente grite "Amo al Gran Hermano" y vaya con la corriente. –

Respuesta

11

Esto es básicamente una pregunta de opinión, y por lo tanto es bastante peligroso.

Mi opinión es un sí calificado. Vale la pena aprender a manejar la memoria básica. La calificación es no empantanarse en ella. Conozca lo que ARC está haciendo por usted bajo el capó con algunos proyectos muy simples. Una vez que tenga una comprensión básica de cómo manejar la administración de la memoria, es decir, cómo evitar retener los ciclos (como se aludió a los jemmons, todavía pueden ser un problema con ARC). Una vez que tenga una comprensión básica de la administración de la memoria. Comience a usar ARC.

También como señaló Jason Coco, ARC maneja la administración de la memoria para (para decirlo simplemente) las subclases de NSObject. Entonces, todos los Objetos de CF seguirán manejándose, si necesita usarlos.

Una excelente explicación sobre lo que ARC está haciendo por usted bajo el capó se puede encontrar en WWDC2011 Session 323 - Presentación del conteo automático de referencias.

Pero hay algunas otras consideraciones que pueden dirigir su decisión.

¿A qué dispositivos debe dirigirse?

Si va a apuntar a iOS 4.3 o superior ARC maneja con eficacia la gestión de memoria para usted. (De las subclases NSObject)

Si va a apuntar a iOS 4.2, entonces no será capaz de utilizar weak referencias (se usará unsafe_unretained). iPhone 3g? & iPod touch La segunda generación está atascada en este nivel de sistema operativo, porque hay muchos de estos dispositivos todavía en servicio, muchos desarrolladores todavía los están apuntando.

Si planea apuntar a iOS s antes que 4.2 (Esto sería raro) definitivamente tendrá que aprender MRC (Recuento de referencia manual).

Si planea construir aplicaciones Mac, hay un recolector de basura disponible en esa plataforma. ARC también es una opción (ARC completo 10.7, sin soporte débil 10.6).

4

El estilo "antiguo" es simplemente el recuento de referencias para administrar la vida útil de su objeto. Realmente no hay demasiado, pero puede ser propenso a errores y causar todo tipo de dolor. Si recién está comenzando, personalmente le sugiero que aprenda a programar usando ARC. Todavía podrá tratar el recuento de referencias cuando necesite usar los objetos de la biblioteca C, como CoreFoundation o CoreGraphics.

7

Vale la pena señalar que ARC se comprueba de forma predeterminada cuando se inicia un nuevo proyecto en Xcode. Esta es una buena señal de que la antigua forma de hacer las cosas retain/release está obsoleta y Apple ve ARC como el futuro. Su primera lección como un nuevo desarrollador de ObjC podría ser que nunca vale la pena navegar río arriba contra Apple.

Asimismo, si bien es bastante fácil de convertir viejos retain/release muestras de ARC (en su mayor parte, simplemente introduce ningún retain s, s, y releaseautorelease s), la inversa no es cierto. Y ya he visto una gran cantidad de código de ejemplo que está escrito al estilo ARC. Entonces, como alguien que acaba de comenzar, pagaría más para aprender ARC.

Tenga en cuenta que esto no significa que no tenga que entender el recuento de referencias. Sigue siendo una parte importante del ciclo de vida de un objeto y aún debe tener en cuenta tales cosas (solo para saber cuándo usar las referencias weak o strong). Pero cuando llega el momento de escribir el código, escríbalo con ARC activado.

0

Sería una gran idea solo repasarlo y comprender lo que está sucediendo, pero para el desarrollo no es esencial, y como puede ver la mayoría, si no todos los desarrolladores han movido sus objetivos de implementación a iOS 5.0+, por lo que es probable que no se desarrollen en el conteo manual de referencias.

Sin embargo, si planea utilizar punteros de objetos no recuperables en su código como CFStringRef, es posible que desee realmente mirar ARC no para que pueda entender cosas como bridge, porque puede combinar ARC y código no ARC en un proyecto

Cuestiones relacionadas