nuevas funciones iphone ios ios5 automatic-ref-counting reference-counting

iphone - funciones - ios vs android 2018



¿Cuáles son las ventajas y desventajas de usar ARC? (4)

¿Cuáles son las ventajas y desventajas de usar el nuevo estilo de administración de memoria de recuento automático de referencias (ARC) en un proyecto de iOS?

La ejecución de un programa ARC es casi idéntica a un MRC bien escrito. Es decir, las diferencias de comportamiento a menudo son indetectables porque el orden de las operaciones y el rendimiento son muy cercanos.

Si ya sabe cómo implementar aplicaciones OS X o iOS con recuento manual de referencias (MRC), ARC realmente no agrega funcionalidad, solo le permite eliminar operaciones de recuento de referencias de sus fuentes.

Si no quiere aprender MRC, entonces puede probar primero ARC. Mucha gente lucha con, o trata de ignorar las prácticas comunes de MRC (ejemplo: he introducido una cantidad de desarrolladores objc al analizador estático). Si desea evitar esos problemas, ARC le permitirá posponer su comprensión; no puede escribir programas objc no triviales sin comprender el recuento de referencias y las vidas y relaciones de objeto, ya sea MRC, ARC o GC. ARC y GC simplemente eliminan la implementación de sus fuentes y hacen lo correcto en la mayoría de los casos . Con ARC y GC, aún necesitará dar alguna orientación.

No he medido esto, pero vale la pena mencionar que la compilación de fuentes ARC tomaría más tiempo y recursos.

Si el programa que está desarrollando tiene un uso bastante flojo del recuento de referencias (por ejemplo, una cantidad típica de autorreleases), cambiar a ARC realmente podría mejorar los tiempos de ejecución de su programa y el uso máximo de la memoria.

¿Puedes elegir no usar ARC cuando desarrollas con iOS 5.0 SDK?

Sí, usando CLANG_ENABLE_OBJC_ARC. ARC es compatible con binarios, y todo lo que sucede realmente es que el compilador hace todo lo posible para introducir automáticamente las operaciones de recuento de referencias adecuadas, basándose en las declaraciones visibles para la traducción actual ( vea aquí mi respuesta sobre por qué la visibilidad de la traducción es importante ) . Por lo tanto, también puede habilitarlo y deshabilitarlo para algunas fuentes en un proyecto y habilitarlo para otros.

El modo mixto (algunos MRC y algunas fuentes ARC) es sin embargo bastante complicado, y sutilmente, notablemente las implementaciones wrt que pueden ser duplicadas por el compilador (por ejemplo, el cuerpo de una función en línea puede ser incorrecto). Tales problemas de modo mixto serán muy difíciles de aislar. Los programas y fuentes ObjC ++ serán particularmente difíciles a este respecto. Además, el comportamiento puede diferir según la configuración de tus optimizaciones (como un ejemplo); un programa que funciona perfectamente en una versión de depuración puede introducir una fuga o un zombie en la versión.

¿Recomiendas el ARC o el conteo manual de referencias (MRC) para un nuevo proyecto?

Personalmente, me quedaré con MRC por algún tiempo. Incluso si ARC ha sido probado en el uso del mundo real, es probable que haya un número de problemas restantes que se presenten en escenarios complejos, lo que querrá evitar ser el primero en conocer y depurar. La recolección de basura de OS X es un ejemplo de por qué es posible que desee esperar. Como un ejemplo, el interruptor podría alterar cuando se destruyen objetos: sus objetos pueden destruirse antes y nunca colocarse en piscinas de liberación automática. También podría cambiar el orden en que se lanzan ivars, lo que podría tener algunos efectos secundarios.

También tengo una gran base de código que no quiero perder una semana probando esta función en este momento. Finalmente, la compatibilidad con versiones anteriores sigue siendo importante para mí.

¿Una aplicación que use ARC podrá ejecutarse en versiones anteriores del sistema operativo que iOS 5.0?

Si desarrolla con MRC, será compatible con versiones anteriores. Si desarrolla con ARC, no necesariamente será compatible. De hecho, puede que incluso no se compile sin un poco de trabajo extra. Los requisitos para el tiempo de ejecución están disponibles en algunas versiones anteriores. Ver también esta pregunta . Si necesita compatibilidad con versiones anteriores, ARC no será una opción para algunas versiones del sistema operativo.

Por último, si tuviera que limitar la elección a GC o ARC, recomendaría ARC.

¿Cuáles son las ventajas y desventajas de usar el nuevo estilo de administración de memoria de recuento automático de referencias (ARC) en un proyecto de iOS?

¿Puedes elegir no usar ARC cuando desarrollas con iOS 5.0 SDK?

¿Recomiendas el ARC o el conteo manual de referencias (MRC) para un nuevo proyecto?

¿Una aplicación que use ARC podrá ejecutarse en versiones anteriores del sistema operativo que iOS 5.0?


Estoy usando Lion y xcode 4.3. Yo tuve el mismo problema.

Para solucionarlo, cambié "Configuraciones de compilación-> Objective-C Referencia automática Co" a "No".

Para ver que estaba configurado en "Sí", también tuve que habilitar las opciones "Todos" y "Niveles" en la barra de herramientas que está justo debajo de la barra de herramientas "Configuraciones de compilación".

Una vez que esas opciones se habilitaron, pude ver que mi proyecto tenía esa opción establecida en "Sí". Me tomó un tiempo darme cuenta de que la configuración predeterminada era "No", que es lo que se muestra hasta que habilité la opción "Niveles".


Puede activar ARC a través de "Editar-> Refactorizar-> Convertir a Arc Objective C", esto refactorizará su código por completo (eliminará todas las llamadas de administración de memoria y demás). No hay operación inversa, así que asegúrate de tener las cosas bajo control de la fuente si estás teniendo dudas. Esta publicación muestra cómo desactivarla para archivos específicos. No creo que haya demasiados argumentos para no volver a hacerlo aparte del hecho de que duele ver que todo este esfuerzo puesto en la buena gestión de la memoria se va por el desagüe y que tendremos que dejar de saltar al techo cada vez que vemos init, new, copy sin una liberación / liberación automática correspondiente (y eso llevará un tiempo acostumbrarse). Quizás podría argumentarse que, en algunas circunstancias, la gestión manual de la memoria da como resultado mejoras realmente notables en el rendimiento / huella de memoria, de ser así también me interesaría.


usted lo apaga / CLANG_ENABLE_OBJC_ARC = NO con CLANG_ENABLE_OBJC_ARC = NO ventaja, tiene que escribir menos código y la administración de la memoria es más fácil. La desventaja es que tienes que rascar todo lo que aprendiste sobre la administración de la memoria :) Prefiero apagarlo.