Como nuevo desarrollador de Objective-C, ¿qué problemas relacionados con la memory debería tener cuidado con el uso de ARC?

Recientemente, he comenzado a codificar en Objective-C para dispositivos con iOS 5. Mi nuevo MacBook está cargado con Xcode 4.2 y los últimos SDK de Mac y iOS. Hasta ahora ha sido una experiencia divertida, pero hay un problema que veo con el estado actual de la documentation y los libros disponibles.

Específicamente, la mayoría de los libros (que aún no se han actualizado) siempre hacen reference a cómo y cuándo gestionar su memory. Esto es genial, sin embargo, el SDK / comstackdor actual incluye el recuento automático de references y, dado que lo dejo encendido para mis proyectos, no tengo ni idea de lo que debería supervisar y administrar personalmente.

Vengo de un background de C #. La gestión de la memory en C # (técnicamente, .NET) es manejada totalmente por el recolector de basura del marco. Entiendo que ARC es en realidad una function de compilation que agrega automáticamente el código de la placa de caldera donde pertenece. Además, mis bashs de tratar de descubrir dónde debo gestionar mi propia liberación de objects no han causado más que errores de compilation porque ARC quiere cuidarlo para mí.

Todavía tengo que encontrar un caso en el que necesite administrar mis objects. Me estoy volviendo "perezoso" porque no sé qué monitorear y liberar a mí mismo, y no me acuerdo sobre cómo este comportamiento podría afectar el performance de mi aplicación.

En términos de nuevos usuarios, ¿qué "gotchas" debo tener en count al usar ARC en mis proyectos iOS? He leído algunas preguntas sobre el event handling la memory y el ARC por aquí, pero, para ser honesto, no son amigables con el nuevo desarrollador de iOS. ¿Podría alguien proporcionar una list razonable de viñetas que explique qué problemas y problemas hay que tener en count, así como una guía justa sobre cuándo es necesario el autogestión de la memory?

  • Referencias circulares Cuando los objects son codependientes, se filtrarán. Deberá marcar algunas references como débiles, y los instrumentos pueden ayudarlo a ubicar estas references. Estas filtraciones ni siquiera aparecerán como filtraciones porque contienen fuertes references mutuas.

  • Cree Autorelease Pools @autorelease para mantener los tamaños del grupo de autorelease abajo donde cree muchos objects autoelevados (directa o indirectamente). Específicamente, su progtwig y progtwigs de los que dependa autorelease muchos objects (ARC o de otro tipo). Un object autoelegido es uno que se lanzará "en el futuro". Todos los progtwigs de Cocoa esperan que exista una agrupación autorelease en cada hilo. Es por eso que creas un nuevo grupo cuando creas un nuevo subprocess y por qué lo creas en el main . Las piscinas funcionan como una stack: puede empujar y agrupar. Cuando se destruye un grupo, envía su post de release diferida a cada object que contiene. Esto significa que los loops realmente grandes con muchas asignaciones temporales pueden dar como resultado muchos objects a los que solo hace reference el set, y el set puede crecer mucho. Por esta razón, drena las agrupaciones directamente en algunos casos para minimizar la cantidad de objects que esperan ser liberados y desasignados.

  • Use un puente / bastidor adecuado. A veces necesitarás administrar vidas de manera explícita. ARC maneja los casos obvios, pero hay casos complejos en los que necesitará administrar los times de vida explícitamente.

  • Cuando se usan asignaciones malloc y new , así como también types opacos en las API "Core". ARC solo gestiona los types de NSObject . Todavía necesita liberar, eliminar y utilizar explícitamente el recuento de references para estas asignaciones, types y al interactuar con esas API.

  • Siempre siga las convenciones de nomenclatura NS-API, y evite los attributes explícitos de administración de memory donde sea posible .

  • Obviamente necesitará MRC cuando compile fonts sin ARC o GC. Esto es bastante común cuando se usa / trabaja con otras bibliotecas / cuerpos de código. Por supuesto, el comstackdor maneja las interacciones correctamente para que su progtwig ARC no se escape.

  • ARC maneja la mayor parte de lo que necesitará si usa el nombre apropiado y el estilo escrito, pero habrá algunos otros casos de esquinas. Afortunadamente, aún puedes ejecutar Fugas y Zombis para localizar estos problemas si no te das count durante el desarrollo.