1. 3 - GESTIÓN DE MEMORIA
Curso de desarrollo de aplicaciones móviles para iPhone y iPad
endika.gutierrez@urbegi.com
alex.rayon@urbegi.com
Urbegi Learning
Contents
2. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
3. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
4. GESTIÓN DE
MEMORIA
• Lagestión de memoria se conoce como el proceso de
reserva y liberación dinámica de la memoria volatil, es
decir, memoria RAM.
• Entodo el transcurso de la informática se han dado diferentes
aproximaciones para solucionar este problema
5. GESTIÓN DE
MEMORIA 2
• La gestión de memoria es un proceso susceptible a errores.
• Una de las principales fuentes de fallos en tiempo de
ejecución
• Las
diferentes aproximaciones tratan de simplificar este
proceso y por tanto reducir los errores que se producen
6. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
7. ALOJAMIENTO
ESTÁTICO
• Modelo de gestión de memoria de los primeros sistemas
• Se reserva toda la memoria de manera estática a la carga de
la aplicación y se libera toda ella al cierre de la aplicación
• Empleada en los origines de la informática
8. ALOJAMIENTO
ESTÁTICO 2
• Presente en lenguajes antiguos como Basic o ensamblador
• Ventajas
• Manejo de memoria sencillo
• Libre de errores
• Desventajas
• Poco óptimo, se desaprovecha mucha memoria
• No permite estructuras de tamaño dinámico
9. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
10. GESTIÓN MANUAL
DE LA MEMORIA
• Siguiente aproximación a la gestión de la memoria
• Se permite la creación de bloques de memoria dinámicos
• Esresponsabilidad del programador decidir donde se liberarán
estos bloques
• Inconveniente: Si
un puntero es compartido por dos
objetos, cuando se destruya uno de ellos no sabra si
destruirlo o no
11. GESTIÓN MANUAL
DE LA MEMORIA 2
• Empleado en Lenguajes de más bajo nivel C/C++
• Este
tipo de gestión de memoria se encuentra presente en
iOS para la gestión de estructuras de C
• Recordemos que Objective-C es un superconjunto de C
12. GESTIÓN MANUAL
DE LA MEMORIA 3
• Ventajas
• Permite la reserva dinámica de memoria
• Elmétodo más eficiente, no se desperdicia memoria ni
tiempo de ejecución.
• Desventajas
• Haceresponsable al programador de destruir los objetos
creados.
• Es el más propenso a errores
13. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
14. RECOLECCIÓN DE
BASURA
• Trata de abstraer al programador de la gestión de la memoria
• Basado en un proceso denominado Recolector de Basura
encargado de buscar y liberar los bloques de memoria que no
se estén usando.
• Presente en los lenguajes interpretados y Java
15. RECOLECCIÓN DE
BASURA 2
• Ventajas
• Asegura el uso eficiente de la memoria
• El
programador se abstrae completamente de la gestión
de la memoria
• Desventajas
• Impacto en el rendimiento ya que se tiene que ejecutar el
recolector de basura
• Existe una cierta latencia en la liberación de la memoria
16. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
17. CONTEO DE
REFERENCIAS
• Detodas las alternativas para la gestión de la memoria
Objective-C opta por el conteo de referencias
18. CONTEO DE
REFERENCIAS 2
• Basado en un contador asociado a cada bloque de memoria
• Este cuenta el número de variables que referencian al objeto
• Porlo tanto, cuando el contador llega a 0 el objeto se libera
automáticamente
• Cada vez que se asigna un objeto a la variable se llama al
método retain y cada vez que se deja de referenciar se
llama al método release
19. CONTEO DE
REFERENCIAS 3
• Ventajas
• Solucionaalgunos de los problemas que presenta la
gestión de memoria manual.
• Si
un objeto es compartido se liberar cuando ningun
objeto lo reuquiera
• Eficienteen cuanto a tiempo de proceso ya que no
necesita ningún proceso externo
20. CONTEO DE
REFERENCIAS 4
• Desventajas
• Sigue delegando responsabilidad en el desarrollador
• Si se olvida un retain puede dar errores de acceso
• Si se olvida un release quedan bloques sin liberar
• Se tiene que mantener un entero por cada objeto con el
proposito de almacenar el contador
21. CONTENIDO
• Gestión de la Memoria
• Alojamiento estático
• Gestión manual de memoria
• Recolección de basura
• Conteo de referencias
• Conteo de referencias automático
22. CONTEO DE
REFERENCIAS
AUTOMÁTICO
•Apartir de iOS 5 Apple introdujo el Automatic Reference
Counting
• Libera al programador de tener que llamar a los métodos
retain y release
• Llamaa estos métodos cuando se asignan o liberan
respectivamente
23. CONTEO DE
REFERENCIAS
AUTOMÁTICO 2
• Simplificala gestión de memoria casi al nivel de la
recolección de basura
• Manteniendo el rendimiento original
24. CONTEO DE
REFERENCIAS
AUTOMÁTICO 3
• Sinembargo sigue dependiendo del programador para
ciertos casos concretos
• Existen unos casos denominados dependencias circulares o
islas de memoria que requieren trabajo por parte del
desarrollador
25. CONTEO DE
REFERENCIAS
AUTOMÁTICO 4
• Supongamos que tenemos el siguiente caso:
retainCount == 1
Objeto 1
Objeto 2 Objeto 3
retainCount == 1 retainCount == 1
• Todos los objetos están siendo referenciados por otro, sin
embargo no están disponibles en el contexto actual de la
aplicación
• Se ha producido una perdida de memoria (Memory Leak)
26. CONTEO DE
REFERENCIAS
AUTOMÁTICO 5
• Para
estos casos hay que diferencia dos tipos de
propiedades
• Propiedades fuertes o strong que retienen el objeto al
asignar la variable y la liberan cuando se dejan de usar
• Propiedadesdébiles o weak que simplemente asignan el
puntero en el setter por lo que no se rentendrá
27. CONTEO DE
REFERENCIAS
AUTOMÁTICO 6
• Si
en el ejemplo anterior una de las propiedades es weak
tendriamos el siguiente escenario
retainCount == 1
Objeto 2 strong
strong Objeto 3
retainCount == 0
weak
Objeto 1
retainCount == 1
• Porlo tanto se liberaría el objeto 3 y despues los otros dos
objetos
28. CONTEO DE
REFERENCIAS
AUTOMÁTICO 7
• Existe un tercer tipo de propiedades denominadas copy o
copia.
• Estas producen una copia del objeto en el setter
• Sesuelen emplear en objetos como strings, numbers,
arrays...
• Siqueremos que una modificación no altere el valor
cuando se hizo el set