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]
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. –
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) –
¿Alguna vez encontró la respuesta a esto? También trato de evitar problemas con la memoria de fuentes UIWebView. –