Las 3 reglas de oro de la gestión de memoria en Cocoa & Objective C

| Última modificación: 3 de mayo de 2024 | Tiempo de Lectura: 2 minutos
Premios Blog KeepCoding 2025

iOS Developer & Co-Fundador de KeepCoding

Gestión de memoria en Cocoa & Objective C

Aunque Objetive-C 2.0 incluye un recolector de basura (gracias sean dadas al Altísimo), si quieres programar apps para iPhone, no puedes contar con ello. Desgraciadamente, a fecha de hoy (2011) en Cocoa Touch no es posible utilizar el GC (recolector de basura) puesto que su uso continuado gastaría la batería a demasiada velocidad, o al menos eso dice Steve Jobs. Por lo tanto, si quieres programar para iOS, no te queda más remedio que descender a los infiernos de la gestión manual de memoria. Esta es fuente de confusiones y bugs horrendos en todos los lenguajes que carecen de GC; no obstante, en Objetive-C tenemos la ventaja de que la «framework» (Cocoa) nos echa una mano haciéndose cargo de la mayor parte del trabajo pesado.  Gracias a esto, basta con que recuerdes 3 reglas mnemotécticas («rules of thumb», que decimos los que hablamos Latín) para salir airoso en el 99% de los casos.

Conceptos básicos de gestión de memoria en Objective C

Antes de pasar a la chuleta de las 3 reglas, conviene tener claros algunos conceptos.
  1. Todo objeto tiene un «retain count», que a «grosso modo»viene a ser un recuento de cuantos otros objetos hacen referencia a él.
  2. Cuando creas un objeto con los mensajes alloc o copy, dicho objeto tendrá un recuento de 1.
  3. Cuando le mandas el mensaje release o autorelease a un objeto, decrementas en una unidad dicho «retain count».
  4. Cuando le mandas el mensaje retain, dicho recuento aumenta en una unidad.
  5. Cuando el recuento llega a cero, pasa a estar listo para ser destruido y el sistema le mandará el mensaje dealloc en algún momento del futuro próximo (no necesariamente de inmediato), y será destruido.
Pues si tenemos esto claro, ya podemos pasar a las 3 reglas que impedirán que tengamos filtrados de memoria (objetos que nunca son destruidos), o pero aún, errores de acceso (intentar usar un objeto que ya ha sido destruido) que cuelguen nuestro programa, nos hagan quedar en ridículo y hagan que nuestra App sea rechazada por Apple.

Las 3 reglas de la gestión de memoria en Cocoa

En general, sólo hay dos formas de  usar objetos en Cocoa:
  • Como una variable de instancia (uso a largo plazo)
  • Como un objeto temporal dentro de un método (uso a corto plazo).
  1. Primera Regla: Para las variables de instancia, usa SIEMPRE propiedades autogeneradas (@property y @synthesize). Esto es todo lo que tienes que recordar para las variables de instancia. Las demás reglas se refieren a los objetos temporales.
  2. Segunda regla:  Para los objetos temporales, si los has creado llamando a alloc o a copy, eres responsable de llamar a release o autorelease al final del método en el que los has creado.
  3. Tercera regla: Si has creado ese objeto temporal de cualquier otra forma que no sea con alloc o copy, no tienes que hacer nada.
Con esto estarás seguro el 99% de los casos. De los otros caso excepcionales, ya hablaremos otro día.  

Fernando Rodríguez

Sígueme en twitter. Cursos de desarrollo iPhone

Noticias recientes del mundo tech

¡CONVOCATORIA ABIERTA!

Desarrollo de apps móviles ios & Android

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado

KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.