iphone - uiwebview y pérdida de memoria enorme
memory memory-management (3)
Tengo un problema al usar UIWebViews, he visto la misma pregunta aquí pero no hubo una respuesta útil. la pregunta está aquí: gestión de la memoria UIWebView . Lo citaré
Estoy desarrollando una aplicación que hace un uso intensivo de UIWebView. Esta aplicación genera dinámicamente muchas UIWebViews mientras carga contenido desde mi servidor. Algunas de estas UIWebViews son bastante grandes y tienen muchas imágenes.
Si uso instrumentos para detectar fugas, no los detecto. Sin embargo, se asignan muchos objetos y sospecho que tiene que ver con UIWebViews.
Cuando la versión web se libera porque ya no es necesaria, parece que no se ha liberado toda la memoria. Quiero decir, después de una solicitud a mi servidor, la aplicación crea una UITableView y muchas vistas web (los instrumentos dicen que son aproximadamente 8Mb). Cuando el usuario vuelve a presionar, todos se liberan, pero el uso de la memoria solo disminuye alrededor de 2 a 3 Mb, y después de 5 a 10 minutos con la aplicación se bloquea.
He creado una aplicación de prueba simple y tengo los mismos resultados.
Es un TableView, estoy creando DetailsView como este:
DetailsVC *detailViewController = [[DetailsVC alloc] initWithNibName:@"DetailsVC" bundle:nil];
detailViewController.n = indexPath.row;
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
en DetailsVC tengo una vista web creada en IB. Yo cargo html así:
NSString *urlAddress;
if (self.n == 0)
{
urlAddress = @"http://www.google.com";
}
else
{
urlAddress = @"http://www.yahoo.com";
}
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:requestObj];
Yo también hago:
- (void)viewDidUnload {
self.webView = nil;
}
Eso es todo, cada vez que elijo WebView en RootViewController pierdo 2-3 Mb de memoria, ¿hay alguna solución a este problema?
Gracias.
Sé que este hilo es un poco viejo, pero solo por una idea y para agregar algunas piezas más relevantes, me gustaría agregar estos consejos para que los futuros visitantes puedan ver esto también y que el problema se solucione.
Debe
set Cache policy
en su objetoNSURLRequest
y verificar las políticas que ignoran los datos de caché, consulte la documentación .Como tiene una llamada para
release
en su código, supongo que está utilizando ARC, entonces ¿por qué no llama a[super dealloc]
en viewDidUnload ()?Eche un vistazo a este hilo de cómo limpiarForDealloc usando UIWebView.
¿Es un UITableViewController? con una celda personalizada? Trate también de desasignar (liberar, quitar de SuperSuperView, configurarlo).
¡Espero eso ayude!
Simplemente compruebe lo siguiente 1. ¿Desea hacer que la vista web como propiedad la elimine? 2. Y coloque el siguiente código en didFinishLaunchingWithOptions
en Appdelegate
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
Creo que tu problema está resuelto
Supongo que desde que configuras webview = nil, pierdes la oportunidad de liberarlo.