Estoy tratando de arreglar un montón de fugas que mi UIWebView
está causando y no puedo encontrar su origen ni una solución alternativa. Lo que hago es conseguir un poco de contenido de la web a través de una solicitud de red, a continuación, montar mi HTML y cargarlo sobre la marcha:Fugas de memoria con UIWebView y Javascript
NSString* body = <some HTML>;
NSString* html = [NSString stringWithFormat:kHTMLTemplate, [self scripts], [self styles], body];
[_webView loadHTMLString:html
baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];
Cada vez que hay nuevo contenido disponible, ejecuto loadHTMLString
de nuevo para actualizar la vista Web . Reutilizo la misma vista web, el mismo controlador, el mismo todo.
Instrumentos muestra un patrón muy extraño en el que todos los objetos son filtrados generales bloques de diferentes tamaños y ninguno de ellos ha de cualquier información que se le atribuye: ninguna biblioteca responsable, hay un marco responsable, etc. Cada vez que se ejecuta loadHTMLString
, se agregan nuevas fugas.
Parece que hay varios hilos en S.O. acerca de UIWebView
filtración de memoria. He intentado todas las sugerencias que encontré (por ejemplo, estableciendo NSURLCache
en cero o restableciéndolo; intenté liberar el UIWebView existente y asignar uno nuevo cada vez que tengo datos nuevos, etc.) pero nada me ha ayudado.
Mis investigaciones hasta ahora conducen a un resultado claro: parece que las filtraciones solo están presentes si el HTML que cargo en la vista contiene algo de Javascript. Si observa la cadena anterior html
, está formada por varios componentes; uno es [self scripts]
que es una función que devuelve simplemente:
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>"
"<script type='text/javascript' src='jmy.js'></script>";
Si quito esto, no hay escapes allí. Pero las filtraciones aparecen tan pronto como agrego una etiqueta <script>
a mi HTML. Incluso si simplemente parecen incluir el archivo de jQuery (o cualquier otro archivo js, en cuanto a esto):
return @"<script type='text/javascript' src='jquery-1.4.4.min.js'></script>";
Entonces, la pregunta: ¿Alguien una idea acerca de lo que está sucediendo aquí? Claramente incluir un archivo Javascript en mi HTML está haciendo la memoria de pérdida UIWebView
.
El hecho de que las fugas aparecen tanto cuando reutilizar el mismo UIWebView
objeto o cuando una instancia de un nuevo cada vez que tenga contenido, me lleva a pensar que debe haber algo en la forma en archivos javascript son manejados por loadHTMLString
que conduce a las filtraciones
¿Alguien sabe cómo esto podría solucionarse?
Esto puede ser un error en UIWebView. http://blog.techno-barje.fr/post/2010/10/04/UIWebView-secrets-part1-memory-leaks-on-xmlhttprequest/ –
@ H2CO3: gracias, también lo intenté ... sin mejoras. .. – sergio
creo que estamos guardados por iOS 8. Consulte esta respuesta en WKWebView http://stackoverflow.com/questions/16514230/massive-memory-leak-in-ios-uiwebview –