01/03 - Hello NSCoder - Gestión de Memoria

722 views

Published on

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

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
722
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

01/03 - Hello NSCoder - Gestión de Memoria

  1. 1. Gestión de memoria Ricardo Salazar Twitter: @risalba
  2. 2. 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]
  3. 3. 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]
  4. 4. 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]
  5. 5. 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]
  6. 6. 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]
  7. 7. Palabras clave• Retener: • alloc init [[NSObject alloc] init] • retain • copy (mutableCopy) • new• Liberar: • release • autorelease (NSAutoreleasePool) [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  8. 8. Ejemplo.Uso de palabras clave [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  9. 9. 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]
  10. 10. 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]
  11. 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]
  12. 12. Property(opciones) 2• retain • Retenemos el objeto• copy • Creamos una copia• assing • simplemente assignamos [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  13. 13. Property(opciones) 3• readonly • No se genera el setter, solo se genera el getter. [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  14. 14. Ejemplo.Aplicación de properties y dot notation. [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  15. 15. [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  16. 16. 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]
  17. 17. NSAutoReleasePool [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]
  18. 18. Core Foundation, Debugging y más. Podeis mirar la documentación o venir al próximo evento.La segunda parte de gestión de memoria yla ponencia sobre Debugging tuvieron queser pospuestas por falta de tiempo. [NSCoderBCN event:@”Hello NSCoder” date:28/05/11]

×