2012-02-23 12 views
7

Ho appena scoperto che quando UIwebview viene deallocato, la maggior parte della memoria utilizzata non viene completamente riciclata. Dopo aver fatto un po 'di profilo, ho scoperto che la maggior parte della memoria ancora viva è la cache del glifo dei font (il problema è molto peggiore se si apre una pagina web cinese, dato che il cinese ha più caratteri, che significa più glifi dei font).Perdita di memoria in Font Glyph/UIWebView

C'è un modo per controllare la cache? Sto lavorando su un browser web iOS, questo problema mi blocca per 2 settimane.

Attached è una semplice demo di riproduzione. 1) Eseguire la demo con la memoria "Profilo di assegnazione". 2) immettere http://www.163.com nella barra degli indirizzi e attendere il completamento del caricamento. 3) è possibile vedere circa 10M di memoria consumata nello strumento strumento. 4) fare clic sul pulsante Cancella (l'UIwebview verrà rimosso dall'albero visivo e riciclato) 5) è ancora possibile vedere in memoria circa 9 M di memoria.

BTW, NSURLCache è stato disabilitato con il codice riportato di seguito, per separare il problema. [[NSURLCache sharedURLCache] setMemoryCapacity: 1]

+0

Sto cercando di indagare su come Safari Safari si occupa di questo problema. c'è un modo in cui posso stampare la tabella dei simboli di importazione con otool? otool -ov stampa tutti i simboli definiti in questa applicazione, ma voglio sapere quale simbolo questa app è collegata ad altre librerie dinamiche. Io uso class-dump-z per scaricare tutti i file di intestazione, ma non ho alcuna informazione utile. –

+0

Il vero problema è in draw_glyphs in CoreGraphics, dopo CGFontCreateGlyphBitmap, la mappa dei bit viene memorizzata nella cache e in nessun modo possiamo controllare la cache. non è una perdita ma su iPad1 è davvero un problema per la mia applicazione (con molto testo) –

+1

Hai mai trovato la risposta a questo? Sto anche cercando di evitare problemi con la memoria dei font di UIWebView. –

risposta

0

Abbiamo riscontrato problemi simili nella nostra applicazione di produzione. Ho creato una riduzione del bug in cui ho ripetutamente chiara la visualizzazione Web (carico "<html> </html >") quindi caricare il seguente URL in un UIWebView:

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

Questo si blocca in modo affidabile l'applicazione dopo circa 180 carichi. Ho presentato una segnalazione di bug per questo problema con Apple come ID problema 15659596 e aspetto una risposta.

Tuttavia, non sono ancora chiaro in quali situazioni questo si verifica esattamente e quando non lo fa. Ovviamente, accade per tale URL, ma ho anche testato la stessa procedura con:

  1. Lo stesso contenuto web che ha osservato la questione in natura nella nostra applicazione
  2. A Google Image Search per termini come " gatto e cane".

In entrambi questi scenari, il problema non viene visualizzato. Non osservo una crescita dell'utilizzo della memoria a lungo termine e l'applicazione non si blocca.

Quindi non ho alcuna risposta per te, ma posso confermare che esiste un problema con UIWebView, che ho segnalato ad Apple e che sembra essere correlato ai caratteri web.