Hay muchos objetos en cada aplicación de iPhone que vivirán para siempre hasta que la aplicación muera. Ellos son: delegado de aplicación, ventana, controlador de vista principal, puede ser controlador de navegación o pestañas, todos los objetos dentro de ellos. ¿Por qué demonios debería liberarlos justo antes de dejar de gastar preciosos ciclos de CPU? Por lo que yo entiendo, el proceso de las aplicaciones se terminará, por lo que es un montón, constante o no se habrá ido también.¿Por qué debería liberar (y por lo tanto desmantelar) los objetos justo antes de cerrar la aplicación?
¿Por qué debería lanzarlos? Los manuales de desarrollo de Apple insisten en ello como en el siguiente ejemplo de código (desde iPhone Development Guide). Es solo el primer lugar que encontré buscando por palabra dealloc en la biblioteca.
@implementation HelloWorldAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after app launch
MyView *view = [[MyView alloc] initWithFrame:[window frame]];
[window addSubview:view];
[view release];
[window makeKeyAndVisible];
}
- (void)dealloc {
[window release];
[super dealloc];
}
@end
Desde la sección discusiones sobre NHObject-dealloc método:
Tenga en cuenta que cuando una aplicación termina, objetos puede no se enviará un mensaje dealloc desde la memoria del proceso se borra automáticamente al salir-ES MÁS eficiente simplemente para permitir que el sistema operativo limpie recursos que para invocar todos los métodos de administración de memoria. Por esta y otras razones, no se debe administrar los recursos escasos en dealloc
Pero dealloc método en el ejemplo anterior se le llama en la implementación actual si su aplicación es lo suficientemente rápido para reaccionar a applicationWillTerminate dentro de los 15 segundos.
De nuevo. ¿Debo evitar escribir el método dealloc anterior para la velocidad de salida de la aplicación o hay algún problema con dicho enfoque?
¿Dónde insisten los manuales de Apple en ello? He leído la mayor parte de su documentación en un momento u otro y no recuerdo eso; de hecho, recuerdo haber leído lo contrario en varios lugares, que no desmantelar es mejor para la eficiencia. – Chuck
Apple también afirma que no hay garantía de que reciba una llamada dealloc en algunas de estas clases cuando abandone. Por lo tanto, colocar código para guardar en su rutina dealloc sería algo malo. – mahboudz
¿Por qué molestarse en escribir el código dealloc para ellos en tal caso? –