Soy nuevo en Objective-C y estoy intentando comprender la gestión de memoria para hacerlo bien.¿Cuándo se lanza realmente un objeto de autorretrato?
Después de leer el excelente
Memory Management Programming Guide for Cocoa por Apple mi única preocupación es cuando realidad un objeto autoreleased se libera en un archivo/iPod aplicación para el iPhone. Según tengo entendido, al final de ejecutar el ciclo. Pero, ¿qué define un ciclo de ejecución en la aplicación?
Así que me preguntaba si el siguiente fragmento de código es correcto. Suponer un objeto
@implementation Test
- (NSString *) functionA {
NSString *stringA;
stringA = [[[NSString alloc] initWithString:@"Hello"] autorelease]
return stringA;
}
- (NSString *) functionB {
NSString *stringB;
stringB = [self functionA];
return stringB;
}
- (NSString *) functionC {
NSString *stringC;
stringC = [self functionB];
return stringC;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString* p = [self functionC];
NSLog(@"string is %@",p);
}
@end
¿Este código es válido?
A partir del texto de manzana entiendo que el NSString regresó de funciónA es válido en el ámbito de funciónB. No estoy seguro de si es válido en función C y en viewDidLoad.
Gracias!
¿Entiendo correctamente que si no creo ningún conjunto de autorreleases, todas las variables autorretractadas permanecerán en la memoria hasta que la aplicación no se cierre? – Burjua
En realidad, los marcos del sistema crean algunos grupos de liberación automática para usted en la parte superior de la pila del hilo principal en métodos como UIApplicationMain(). Sin embargo, si comenzó su propio hilo y no creó un grupo, entonces sí esos objetos se fugarían. El método de liberación automática se registra en la consola en ese caso. –
Ok, gracias, pero esto es extraño, es una práctica normal usar constructores que devuelven objetos liberados automáticamente y no los liberan, pero en realidad es lo mismo que tener pérdida de memoria (la memoria se asigna hasta que se cierra la aplicación). O no entiendo algo? – Burjua