2012-02-23 27 views
7

Acabo de descubrir que cuando UIwebview se deshace, la mayor parte de la memoria que utiliza no se recicla por completo. Después de hacer un poco de perfil, encontré que la mayor parte de la memoria aún viva es Caché de glifos de fuente (el problema es mucho peor si abres una página web china, ya que el chino tiene más caracteres, lo que significa más glifo de fuente).Fuga de memoria en Font Glyph/UIWebView

¿Hay alguna forma de que podamos controlar el caché? Estoy trabajando en un navegador web iOS, este problema me bloquea durante 2 semanas.

Attached es una demostración de repro simple. 1) Ejecute la demostración con la memoria "Perfil de asignación". 2) entrada http://www.163.com en la barra de direcciones y esperando que termine de cargarse. 3) puede ver alrededor de 10M de memoria consumida en la herramienta del instrumento. 4) haga clic en el botón Borrar (la vista de UIwebview se eliminará del árbol visual y se reciclará) 5) aún puede ver la memoria de alrededor de 9M.

BTW, NSURLCache se deshabilitó con el siguiente código, para separar el problema. [[NSURLCache sharedURLCache] setMemoryCapacity: 1]

+0

Estoy tratando de investigar cómo Safari móvil se ocupa de este problema. ¿Hay alguna manera de que pueda imprimir la tabla de símbolos de importación con otool? otool -ov imprime todos los símbolos definidos en esta aplicación, pero quiero saber qué símbolo vincula esta aplicación desde otra biblioteca dinámica. Utilizo class-dump-z para volcar todos los archivos de encabezado, pero no obtengo ninguna información útil. –

+0

El problema real está en draw_glyphs en CoreGraphics, después de CGFontCreateGlyphBitmap, el mapa de bits se almacena en caché, y no hay manera de que podamos controlar el caché. no es una fuga, pero en iPad1 es realmente un problema para mi aplicación (con un montón de texto) –

+1

¿Alguna vez encontró la respuesta a esto? También trato de evitar problemas con la memoria de fuentes UIWebView. –

Respuesta

0

Observamos problemas similares en nuestra aplicación de producción. Creé una reducción del error en el que me claro en repetidas ocasiones la vista web (carga "<html> </html >") después cargue el siguiente URL en un UIWebView:

http://typecast.com/preview/google/Mr%20Bedfort/Sigmar%20One/Miss%20Fajardose 

Esto se bloquea de forma fiable la aplicación después de aproximadamente 180 cargas. He presentado un informe de error para esto con Apple como ID de problema 15659596, y estoy esperando una respuesta.

Sin embargo, todavía no tengo claro en qué situaciones ocurre exactamente esto y cuándo no. Obviamente, esto ocurre para esa URL, pero también he probado con el mismo procedimiento:

  1. El mismo contenido web que observa el tema en la naturaleza en nuestra aplicación
  2. Una búsqueda de imágenes Google de términos como " gato y perro".

En ambos escenarios, el problema no aparece. No observo un aumento en el uso de la memoria a largo plazo y la aplicación no falla.

Así que no tengo ninguna respuesta para usted, pero puedo confirmar que existe un problema con el UIWebView, que se lo informé a Apple, y que parece estar relacionado con las fuentes web.