Gestión de memoriaRicardo Salazar
Twitter: @risalba
[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.
[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
[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
[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.
[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.
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Palabras clave• Retener:
• alloc init [[NSObject alloc] init]
• retain
• copy (mutableCopy)
• new
• Liberar:
• release
• autorelease (NSAutoreleasePool)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Ejemplo.Uso de palabras clave
[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;
[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;
[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)
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Property(opciones) 2
• retain
• Retenemos el objeto
• copy
• Creamos una copia
• assing
• simplemente assignamos
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Property(opciones) 3
• readonly
• No se genera el setter, solo se genera el getter.
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
Ejemplo.Aplicación de properties y
dot notation.
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
[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
[NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
NSAutoReleasePool
[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.