2010-05-29 14 views
21

Actualmente tengo una UIWebView que se muestra dentro de una vista modal. Básicamente es una vista de detalle que proporciona una vista de una página cuando el usuario hace clic en un enlace. Cuando se descarta la vista y luego se vuelve a abrir (cuando el usuario hace clic en otro enlace), el contenido cargado previamente sigue siendo visible y el contenido nuevo se carga "encima" del último contenido. Esto tiene sentido porque la instancia de UIWebView persiste entre sesiones y solo se lanza cuando se necesita la memoria.Borrar el contenido de UIWebView al cerrar la vista modal (iPhone OS 3.0)

Sin embargo, me gustaría borrar completamente el UIWebView cuando la vista modal se descarta para que 1) el contenido se borre y 2) se libere la memoria. Hasta ahora, mi investigación e intentos no han encontrado una respuesta. Estos enlaces no han trabajado para mí:

  1. is it possible to free memory of UIWebView?
  2. Reused UIWebView showing previous loaded content for a brief second on iPhone

he tratado [[NSURLCache sharedURLCache] removeAllCachedResponses]; y ajuste de la web View a cero y liberar manualmente la web View sobre modal-vista-despedir a ningún aprovechar. ¿Alguna idea de las masas marchitas?

Respuesta

34

La liberación de la vista web es probablemente el mejor enfoque. Si una vista está en una jerarquía de vistas (tiene una supervista) debe llamar a removeFromSuperview para que la supervista libere la vista.

También puede cargar una cadena HTML de un documento vacío:

[webView loadHTMLString:@"<html><head></head><body></body></html>" baseURL:nil]; 
65

veces loadHTMLString es demasiado lento. También puede utilizar:

[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML = \"\";"]; 

no estoy seguro de si eso va a liberar la cantidad de memoria aunque ...

+2

perfecto! Probablemente la solución más fácil para el borrado visual de la vista web. Aún no entiendo por qué loadHTMLString es tan lento. Tal vez sea porque estoy cargando otra página directamente después, y la vista web deja de cargar y muestra la página vacía cuando comienza a cargar la nueva. – Cray

+0

La mejor solución aquí. No sé por qué esta no es la mejor respuesta. De todos modos, ¡gran respuesta! – filou

+1

Lo mejor de este método es que no se llamará al método de delegado webViewDidFinishLoad. – user523234

14

Parece en algunas circunstancias los métodos sugeridos por drawnonward y Rob no pueden trabajar (posiblemente algo que ver con CSS en la página que está siendo limpiado), sin embargo, esto ha funcionado:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
5

en mi caso necesitaba para despejar la vista web de su contenido de forma instantánea y ser capaz de comenzar a cargar algo más inmediato. Ni cargar una cadena HTML de documento vacía ni borrar la página con JavaScript dio como resultado el efecto deseado. En lugar de ello he utilizado:

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; 
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://stackoverflow.com"]]]; 

Y esto se aclaró la vista al fondo por defecto y ha iniciado la carga de la página siguiente como se esperaba.

Espero que esto ayude a alguien más también.

8

evaluar javascript es generalmente más rápido que cargar una nueva solicitud.

[webview stringByEvaluatingJavaScriptFromString:@"document.open();document.close();"]; 
+1

La mejor respuesta que he visto. –

0

prefiero el siguiente:

[m_webView stringByEvaluatingJavaScriptFromString:@"location.replace('about:blank')"] 
+1

¿por qué lo prefiere? – jujule

Cuestiones relacionadas