2012-02-23 16 views
7

Po prostu odkryłem, że kiedy UIwebview zostanie zwolniony, większość pamięci, której użył, nie zostanie całkowicie poddana recyklingowi. Po wykonaniu jakiegoś profilu odkryłem, że większość wciąż żywej pamięci to cache czcionki glifów (problem jest znacznie gorszy, jeśli otwierasz chińską stronę internetową, ponieważ chiński ma więcej znaków, co oznacza więcej glifów czcionki).Usterka pamięci w Glyphie czcionki/UIWebView

Czy istnieje sposób kontrolowania pamięci podręcznej? Pracuję nad przeglądarką internetową iOS, ten problem blokuje mnie na 2 tygodnie.

Attached to proste demo repro. 1) Uruchom demo z pamięcią "Profil alokacji". 2) wpisz http://www.163.com w pasku adresu i poczekaj, aż skończy się ładowanie. 3) można zobaczyć około 10M pamięci zużytej w narzędziu przyrządowym. 4) kliknij przycisk usuwania (widok UIweb zostanie usunięty z drzewa wizualnego i zostanie poddany recyklingowi) 5) nadal możesz zobaczyć około 9 MB pamięci przy życiu.

BTW, NSURLCache został wyłączony z poniższym kodem, aby oddzielić problem. [[NSURLCache sharedURLCache] setMemoryCapacity: 1]

+0

Próbuję sprawdzić, jak mobilne safari radzi sobie z tym problemem. czy istnieje sposób drukowania tabeli symboli importu z otool? otool -ov wypisuje wszystkie symbole zdefiniowane w tej aplikacji, ale chcę wiedzieć, który symbol tej aplikacji jest połączony z inną biblioteką dynamiczną. Używam class-dump-z, aby zrzucić wszystkie pliki nagłówkowe, ale nie otrzymujemy żadnych użytecznych informacji. –

+0

Rzeczywistym problemem jest draw_glyphs w CoreGraphics, Po CGFontCreateGlyphBitmap, mapa bitowa zostanie zapisana w pamięci podręcznej i nie ma możliwości, abyśmy mogli kontrolować pamięć podręczną. to nie jest przeciek, ale na iPadzie1 to naprawdę problem dla mojej aplikacji (z dużą ilością tekstu) –

+1

Czy kiedykolwiek znalazłeś odpowiedź na to pytanie? Próbuję też uniknąć problemów z pamięcią czcionek UIWebView. –

Odpowiedz

0

Podobne problemy wystąpiły w naszej aplikacji produkcyjnej. I stworzył redukcję błędów, gdzie wielokrotnie jasny pogląd internetowej (load "<html> </html >"), a następnie załadować następujący adres URL w UIWebView:

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

to niezawodnie rozbija aplikację po około 180 masa. Złożyłem zgłoszenie błędu w tym zakresie z Apple jako identyfikator problemu 15659596 i czekam na odpowiedź.

Jednak nadal nie jestem pewien, w jakich sytuacjach to się dzieje dokładnie, a kiedy nie. Oczywiście, zdarza się dla tego adresu URL, ale ja również testowane tę samą procedurę z:

  1. tej samej treści internetowej obserwowanego problemu w środowisku naturalnym w naszej aplikacji
  2. Google Image Search terminów, takich jak " Kot i pies".

W obu tych przypadkach problem nie pojawia się. Nie obserwuję wzrostu wykorzystania pamięci długoterminowej, a aplikacja nie ulega awarii.

Nie mam dla ciebie żadnej odpowiedzi, ale mogę potwierdzić, że istnieje problem z UIWebView, który zgłosiłem firmie Apple i że wydaje się być związany z czcionkami sieciowymi.

Powiązane problemy