2012-02-23 3 views
7

Я только что обнаружил, что когда UIwebview получает dealloc-ed, большая часть используемой памяти не полностью перерабатывается. После выполнения какого-то профиля я нашел большую часть оставшейся памяти - это кеш шрифта шрифта (проблема намного хуже, если вы открываете китайскую веб-страницу, так как у китайца больше символов, что означает больше глифа шрифта).Ошибка утечки памяти в шрифте Glyph/UIWebView

Есть ли способ управления кешем? Я работаю над веб-браузером iOS, эта проблема блокирует меня в течение 2 недель.

Attached - простая демонстрация для воспроизведения. 1) Запустите демо с памятью «Профиль распределения». 2) ввод http://www.163.com в адресной строке и ожидание завершения загрузки. 3) вы можете увидеть около 10 М памяти, потребляемой в инструменте. 4) нажмите кнопку очистки (UIwebview будет удалено из визуального дерева и будет переработано) 5) вы все еще можете видеть около 9M памяти.

BTW, NSURLCache был отключен с кодом ниже, чтобы отделить проблему. [[NSURLCache sharedURLCache] setMemoryCapacity: 1]

+0

Я пытаюсь исследовать, как Mobile Safari справляется с этой проблемой. есть ли способ распечатать таблицу символов импорта с помощью otool? otool -ov напечатать все символы, определенные в этом приложении, но я хочу знать, какой символ это приложение связано с другой динамической библиотекой. Я использую class-dump-z для удаления всех файлов заголовков, но не получает никакой полезной информации. –

+0

Реальная проблема заключается в draw_glyphs в CoreGraphics, после CGFontCreateGlyphBitmap, бит-карта получается кэшированной, и мы не можем контролировать кеш. это не утечка, но на iPad1 это действительно проблема для моего приложения (с большим текстом) –

+1

Вы когда-нибудь находили ответ на этот вопрос? Я также пытаюсь избежать проблем с памятью шрифта UIWebView. –

ответ

0

Мы наблюдали подобные проблемы в нашем производственном приложении. Я создал снижение ошибки, когда я неоднократно ясно веб-просмотра (загрузка «<HTML> </html >»), а затем загрузить следующий URL в UIWebView:

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

Это надежно сбой приложения после того, как около 180 грузы. Я опубликовал отчет об ошибке с Apple в качестве идентификатора проблемы 15659596, и я жду ответа.

Тем не менее, я до сих пор неясно, в каких ситуациях это происходит точно, а когда нет. Очевидно, что это происходит из-за этого URL, но я также испытал ту же самую процедуру с:

  1. В тот же веб-контента, наблюдаемую вопрос в дикой природе в нашем приложении
  2. A Google Image Search для таких терминов, как " кошка и собака".

В обоих этих сценариях проблема не возникает. Я не наблюдаю долгосрочного роста использования памяти, и приложение не падает.

Поэтому у меня нет ответа, но я могу подтвердить, что существует проблема с UIWebView, о которой я сообщил об этом Apple, и что она, похоже, связана с веб-шрифтами.

Смежные вопросы