01/03 - hello nscoder - gestión de memoria
DESCRIPTION
Introducción a la gestión de memoria en objective-c/iOSTRANSCRIPT
![Page 1: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/1.jpg)
Gestión de memoriaRicardo Salazar
Twitter: @risalba
![Page 2: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/2.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Garbage Collector
• En iOS no tenemos Garbage Collector
• En MacOS X se puede activar.
• En iOS tendremos que gestionar la memoria.
![Page 3: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/3.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Gestión completamente manual de memoria?
• Tendremos que responsables y conocer que va a pasar con nuestros objetos en cada momento.
• Mecanismos para ayudarnos:
• Métodos de acceso/properties
• Autorelease
![Page 4: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/4.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
alloc/dealloc
• Todo objeto reserva y libera la memoria que utiliza.
• Para cada nuevo objeto se realizará un alloc (de forma implícita o explícita).
• Nunca llamar a dealloc.
• Se encarga el sistema
• Política de retain count
![Page 5: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/5.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Política de Retain Count
• Un objeto se mantiene en memoria mientras retainCount > 0
• Cuando retainCount == 0 el sistema llama al dealloc del objeto.
• Importante implementar:-(void)dealloc;en nuestros objetos y liberar todos los objetos usados y cancelar procesos en ejecución.
![Page 6: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/6.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Reglas sobre retain
• Siempre liberamos los objetos que retenemos
• Retenemos sólo los objetos que creamos o retenemos explícitamente.
• Sólo asignar puede causar crashes.
• No balancear el conteo correctamente generará memory leaks.
![Page 7: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/7.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Palabras clave• Retener:
• alloc init [[NSObject alloc] init]
• retain
• copy (mutableCopy)
• new
• Liberar:
• release
• autorelease (NSAutoreleasePool)
![Page 8: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/8.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Ejemplo.Uso de palabras clave
![Page 9: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/9.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Métodos de acceso.getters y setters
• Es conveniente acceder a los atributos de un objeto a partir de getters y setters
• Dot notation:
• somePointer=[myObject var];
• somePointer=myObject.var;
• [myObject setVar:value];
• myObject.var=value;
![Page 10: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/10.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Properties
• Declaración:
• @property(opciones) Clase atributo;
• Implementación:
• @synthesise atributo;
• -(Clase)variable;
• -(void)setVariable:(Clase)newVar;
![Page 11: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/11.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Property(opciones) 1
• atomic
• valor por defecto. Más seguro pero menos eficiente
• nonatomic
• más eficiente, en raras ocasiones puede dar problemas (multitheading)
![Page 12: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/12.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Property(opciones) 2
• retain
• Retenemos el objeto
• copy
• Creamos una copia
• assing
• simplemente assignamos
![Page 13: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/13.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Property(opciones) 3
• readonly
• No se genera el setter, solo se genera el getter.
![Page 14: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/14.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Ejemplo.Aplicación de properties y
dot notation.
![Page 15: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/15.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
![Page 16: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/16.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
NSAutoReleasePool• Siempre se suele tener un pool
• Se ejecuta limpia al final de cada ciclo de ejecución
• Las plantillas de proyecto de XCode lo llevan definido en el main
• Podemos crear y trabajar con los pools que deseemos
• Siempre dentro de un mismo método
• Suelen utilizarse en métodos que hacen uso intensivo de elementos autoreleased
![Page 17: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/17.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
NSAutoReleasePool
![Page 18: 01/03 - Hello NSCoder - Gestión de Memoria](https://reader038.vdocumento.com/reader038/viewer/2022100518/559c42221a28abf3508b4785/html5/thumbnails/18.jpg)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Core Foundation, Debugging y más.
Podeis mirar la documentacióno venir al próximo evento.
La segunda parte de gestión de memoria y la ponencia sobre Debugging tuvieron que ser pospuestas por falta de tiempo.