¿Qué debemos tener en cuenta al usar el Conteo automático de referencia (ARC) en el desarrollo de iOS?

Los problemas de retener ciclos usando la metáfora de las redes sociales

En su mayor parte, ARC es mágico. Simplemente funciona, y puedes ignorarlo y seguir haciendo cosas.

Pero existe el riesgo de crear una pérdida de memoria, si crea algo con un ciclo de retención. Tu aplicación no explotará. Pero se aferrará a los objetos que deberían liberarse. Lo que eventualmente podría provocar un bloqueo cuando la memoria esté llena.

El recuento de recursos funciona haciendo que cada objeto mantenga un recuento de cuántos “amigos” están “interesados” en él. Cuando ese número llega a cero. Se deprime y se suicida. Lo cual es muy malo en Facebook, pero muy bueno en las aplicaciones de iOS.

En un ciclo de retención, dos objetos se retienen entre sí. El recuento de ambos objetos nunca llega a cero. Best Friends Forever significa que andan por el resto del tiempo publicando fotos de gatitos en su línea de tiempo.

Cada vez que cree un objeto y lo consulte con un puntero, ARC hará todo el manejo de conteo por usted.

Si tiene una estructura de datos como un árbol, los nodos principales tendrán punteros a los hijos. Pero si esos niños quieren señalar a sus padres, o incluso a la raíz del árbol. Obtendrá un ciclo de retención.

El truco para solucionar esto es usar punteros débiles para esos enlaces hacia atrás. Crear un puntero débil le dice a ARC que no haga las cosas retenidas.

En cualquier red de objetos, debe haber, en la cabeza del programador, una jerarquía que establezca qué objeto es el propietario y cuál es la posesión. Los objetos dominantes tendrán punteros fuertes a sus posesiones.
El objeto sumiso solo debe tener punteros débiles para sus amos. Esos objetos sumisos pueden ser, naturalmente, el maestro para aún más objetos sumisos.

Por lo tanto, si aplica esta rígida jerarquía de estilo (aunque S&M), el problema de los ciclos de retención no le molestará.

Recuerde que si interactúa con CoreFoundation necesita hacer su propia gestión de memoria ya que CoreFoundation usa C en lugar de Objective-C

Esta publicación contiene mucha información sobre ARC:
http://www.learn-cocos2d.com/201