01/03 - hello nscoder - gestión de memoria

18

Click here to load reader

Upload: nscoderbcn

Post on 08-Jul-2015

577 views

Category:

Technology


0 download

DESCRIPTION

Introducción a la gestión de memoria en objective-c/iOS

TRANSCRIPT

Page 1: 01/03 - Hello NSCoder - Gestión de Memoria

Gestión de memoriaRicardo Salazar

Twitter: @risalba

Page 2: 01/03 - Hello NSCoder - Gestión de Memoria

[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

[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

[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

[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

[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

[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

[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]

Ejemplo.Uso de palabras clave

Page 9: 01/03 - Hello NSCoder - Gestión de Memoria

[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

[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

[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

[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

[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

[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

[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]

Page 16: 01/03 - Hello NSCoder - Gestión de Memoria

[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

[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]

NSAutoReleasePool

Page 18: 01/03 - Hello NSCoder - Gestión de Memoria

[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.