La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso de Iniciación a la Programación del iPhone SDK con Objective-C Moncada, 9 de Julio de 2010 Memory Management.

Presentaciones similares


Presentación del tema: "Curso de Iniciación a la Programación del iPhone SDK con Objective-C Moncada, 9 de Julio de 2010 Memory Management."— Transcripción de la presentación:

1 Curso de Iniciación a la Programación del iPhone SDK con Objective-C Moncada, 9 de Julio de 2010 Memory Management

2 2 Memoria Creación e inicialización de objetos –Alloc e init Memory Management –Retain, release, copy, dealloc, autorelease Propiedades –Parámetros de creación –Notación 'punto'

3 3 Creación e inicialización Método alloc –Método de clase que guarda la memoria necesaria Método init –Método de instancia que inicializa los valores de la variables y realiza otras tareas –Pueden haber varios métodos init en una clase (más específicos con parámetros) NSString *string = [[NSString alloc] initWithString:@”Hola”];

4 4 Memory Management En iPhone OS NO hay recolector de basura El programador es el encargado de liberar los recursos (llamadas balanceadas) Cada objeto en Objective-C tiene un destructor, método -dealloc

5 5 Memory Management Cada objeto creado tiene un contador de referencias hacia él (retain count). Al crear (con método +alloc) un objeto, su contador vale 1 -retain y -copy incrementan el contador en 1 -release decrementa el contador en 1 En el método -dealloc se liberan variables de instancia Cuando el contador llega a 0, el método -dealloc se invoca automáticamente (NUNCA MANUALMENTE), y libera el objeto.

6 6 Memory Management ¿Qué pasa con el siguiente método? -(NSString *)returnString{ NSString *string = [[NSString alloc] initWithString:@”Hola”]; return string; //fuga de memoria } Solución: NSAutoreleasePool

7 7 Autorelease Pool Clase NSAutoreleasePool Pila de objetos a liberar NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; Por convención TODOS los objetos construidos con métodos que NO sean Alloc, init, new o copy SON Autorelease

8 8 Demostración

9 9 Errores comunes Fugas de memoria (leaks) -(NSString *) proofMethod{ NSString *string = [[NSString alloc] initWithString:@”Hola”]; return string; //Fuga de memoria }

10 10 Errores comunes Fugas de memoria (Soluciones) -(NSString *) proofMethod{ NSString *string = [[NSString alloc] initWithString:@”Hola”]; [string autorelease]; //Método autorelease return string; } -(NSString *) proofMethod{ NSString *string = [[NSString alloc] stringWithString:@”Hola”]; return string; }

11 11 Errores comunes Liberar objeto autorelease (Error) -(void) proofMethod{ NSString *string = [NSString stringWithFormat:@”Hola %s”,[person name]]; [self setName:string]; [string release]; //Error }

12 12 Errores comunes Liberar objeto autorelease (Soluciones) -(void) proofMethod{ NSString *string = [NSString stringWithFormat:@”Hola %s”,[person name]]; [self setName:string]; } -(void) proofMethod{ NSString *string = [[NSString alloc] initWithFormat:@”Hola %s”,[person name]]; [self setName:string]; [string release]; //Bien. NSString con constructor INIT }

13 13 Propiedades Desde Objective-C 2.0 Proveen el acceso a los atributos del objeto Permiten indicar al compilador – Permisos de acceso a variables de instancia – Políticas de administración de memoria Uso de directivas @property y @synthesize

14 14 Propiedades Antes de las propiedades Método GET (NSString *)Name{ return varName; } Método SET (void)setName:(NSString *)value{ If (varName!=value){ [varName release]; varName=[value copy]; }

15 15 Propiedades Usando propiedades Persona.h @interface Person:NSObject { NSString *name; } @property (copy) NSString *name; @end Persona.m @implementation @synthesize name; @end

16 16 Propiedades Modificadores de las propiedades: Nonatomic: Si no hay problemas de concurrencia Assign: Crea un enlace débil (weak link) Retain: Incrementa en 1 el retain count del objeto Copy: Realiza una copia del objeto readonly

17 17 Notación punto (Dot Syntax) Acceso a variables self.name = newString;es igual a [self setName: newString]; NSLog(@”%s”, [self name]);es igual a NSLog(@”%s”,self.name);

18 18 Notación punto (Dot Syntax) Acceso a variables self.name = newString;NO es igual a name = newString self.name = newString usa el método SET name = newStringacceso DIRECTO variable Acceso directo SOLO en método INIT y DEALLOC

19 19 Notación punto (Dot Syntax) -(void) setName:(NSString *)value { self.name = value; } ¿Cuál es el problema?

20 20 Notación punto (Dot Syntax) -(void) setName:(NSString *)value { self.name = value; } Es lo mismo que -(void) setName:(NSString *)value { [self setName:value]; // ¡Bucle infinito! }

21 21 Bibliografía “Objective-C 2.0 Programming Language” “Memory Management Programming Guide for Cocoa”


Descargar ppt "Curso de Iniciación a la Programación del iPhone SDK con Objective-C Moncada, 9 de Julio de 2010 Memory Management."

Presentaciones similares


Anuncios Google