Gestion de memoria: iOS



 Para hablar un poco sobre gestión de memoria tenemos que tener en cuenta varios conceptos que interactúan de alguna manera con la memoria principal del dispositivo en ios. El sistema ios se caracteriza de poseer gran capacidad de almacenamiento de memoria, en su administración observamos como desarrolla cada actividad para cada proceso y la utilidad que tienen dichos procesos en la memoria.
La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos.
De acuerdo con la documentación de Apple, las dos cuestiones principales en la gestión de memoria son:
·       Liberando o sobrescribir los datos que todavía está en uso. Provoca daños en la memoria.
No liberar datos que ya no está en uso provoca pérdidas de memoria. Cuando la memoria asignada no se libera a pesar de que nunca va a volver a usar, se conoce como pérdida de memoria. Apple Inc. implementa ARC en sus sistemas operativos, como macOS (OS X ) e iOS. Como ya sabemos el lenguaje de programación utilizado en Apple es el lenguaje C u Objetive C, estos lenguajes tenían una gestión de memoria manual, es decir, el programador quitaba o dejaba espacios de memoria según convenía. Cuando el sistema operativo instanciaba un objeto nuevo lo que hacía era reservar y ocupar un espacio de memoria. Pero antes, debíamos tener en cuenta esta manipulación de la memoria, ya que si destruimos un objeto, debiamos liberar ese espacio en la memoria para no acumular “basura”. Eso ahora es automático y lo hace Xcode con el ARC, que es un sistema de gestión de la memoria. Esto optimiza al sistema operativo en un porcentaje muy elevado.

Xcode fue la herramienta que dio paso a la gestión de memoria más eficaz con la ayuda implementada de ARC (Automatic Reference Counting), es una función de gestión de memoria del compilador Clang que proporciona recuentos de referencia automáticos para los lenguajes de programación Objective-C y Swift, los cuales veremos un  poco de ellos.

Referencia de conteo manual vs Referencia de conteo automatico
Cuando se crea una nueva instancia de una clase, ARC asigna una porción de memoria para almacenar información sobre esa instancia. Esta memoria contiene información sobre el tipo de la instancia, junto con los valores de las propiedades almacenadas asociadas a esa instancia. ARC libera la memoria utilizada por esa instancia para que la memoria se pueda usar para otros fines. Esto ayuda que las instancias de clase no ocupen espacio en la memoria cuando ya no sean necesarias.

En un escenario con ARC marcamos las propiedades como:
  • strong

  •  weak

Strong
El sistema se encarga de:
Liberar la memoria cuando los contadores de punteros strong llegan a 0, además, cualquier puntero weak automáticamente se cambia a nil para evitar el cuelgue de nuestro programa al acceder a un lugar de la memoria que ya no apunta a un objeto.
Los punteros strong indican la propiedad del objeto:
•Cuando voy a crear un objeto pienso: "este objeto es mío entonces es strong".
•En caso de duda usar siempre strong.
•Muchísimo cuidado con crear un objeto que solo te pertenece a ti como weak. Tras crearlo instantáneamente desaparecerá de la memoria y el puntero será nil.
Weak
Para prevenir este problema cuando un objeto no nos pertenece y sabemos que vamos a crear un ciclo utilizamos un puntero weak.
Cuando el objeto desaparezca de la memoria nuestro puntero weak será puesto a nil y cualquier mensaje enviado a nil devuelve 0, lo cual no causará problemas catastróficos. Cosa que sí ocurriría si enviamos un mensaje a un objeto utilizando un puntero que ya no apunta a un objeto de ese tipo.

En Swift utiliza el conteo automático de referencias (ARC) para rastrear y administrar el uso de la memoria de su aplicación. ARC libera automáticamente la memoria utilizada por instancias de clase cuando esas instancias ya no son necesarias.
Swift también se asegura de que los accesos múltiples a la misma área de memoria no entren en conflicto, al requerir que el código que modifica una ubicación en la memoria tenga acceso exclusivo a esa memoria. Debido a que Swift administra la memoria automáticamente, la mayoría de las veces no tiene que pensar en acceder a la memoria en absoluto.
Hay tres características del acceso a la memoria a tener en cuenta en el contexto de un acceso conflictivo: si el acceso es de lectura o escritura, la duración del acceso y la ubicación en la memoria a la que se accede. Específicamente, se produce un conflicto si tiene dos accesos que cumplen con todas las condiciones siguientes:
Al menos uno es un acceso de escritura.
Acceden a la misma ubicación en la memoria.
Sus duraciones se superponen.
La diferencia entre un acceso de lectura y escritura suele ser obvia: un acceso de escritura cambia la ubicación en la memoria, pero un acceso de lectura no lo hace. La ubicación en la memoria se refiere a lo que se está accediendo, por ejemplo, una variable, constante o propiedad. La duración de un acceso a la memoria es instantánea o de largo plazo.


- Gian Pizzoferrato

Comentarios

  1. ¿Cómo es el proceso de gestión de memoria sin implementar la herramienta ARC?
    UNIX

    ResponderBorrar
    Respuestas
    1. Como se sabe el ARC (Conteo de referencia automatico) es la practica de retener y liberar informacion segun su estado de uso, esto es a partir de iOS version 5, antes de eso sin la implementacion del ARC era basicamente un recuento de referencia solo que esta vez era manual, es basicamente lo mismo solo que en este caso el usuario era quien daba la orden de retener o conservar informacion pertinente (usando "RETAIN") y liberando la informacion que no se necesitaba (haciendo uso del "RELEASE"), ya que si no se hacia esto la memoria no se liberaba y tendia a cumularse y producia "basura" o "garbage" lo que no gestionaba bien la memoria y haria que procesos que requieran un gran espacio de almacenamiento no se ejecuten de manera correcta, ya con la llegada del ARC el usuario no debia preocuparse por hacer RETAIN o RELEASE.

      Borrar

Publicar un comentario

Entradas populares