2012-02-23 57 views
7

我刚刚发现,当UIwebview得到释放时,它使用的大部分内存都没有完全回收。在做了一些配置文件之后,我发现大部分仍然活着的内存都是字体字形缓存(如果打开中文网页,问题会更糟糕,因为中文有更多字符,这意味着更多字体字形)。Font Glyph/UIWebView中的内存泄漏

有没有什么办法可以控制缓存?我正在使用iOS网络浏览器,这个问题阻止了我2周。

Attached是一个简单的repro演示。 1)运行带有内存“分配配置文件”的演示。 2)在地址栏中输入http://www.163.com并等待它完成加载。 3)你可以在仪器工具中看到大约10M的内存消耗。 4)点击清除按钮(UIwebview将从视觉树中删除并得到回收) 5)仍然可以看到9M左右的内存活着。

顺便说一句,NSURLCache被禁用以下代码,以分离问题。 [[NSURLCache sharedURLCache] setMemoryCapacity:1]

+0

我想调查移动Safari如何处理这个问题。有什么办法可以用otool打印导入符号表吗? otool -ov打印此应用程序中定义的所有符号,但我想知道此应用程序从其他动态库链接的符号。我使用class-dump-z来转储所有头文件,但没有得到任何有用的信息。 – 2012-02-23 02:53:56

+0

实际的问题是CoreGraphics中的draw_glyphs,CGFontCreateGlyphBitmap之后,位图被缓存,并且我们无法控制缓存。这不是漏水,但在iPad1上,这对我的应用程序来说真的是一个问题(有很多文字) – 2012-02-23 13:34:13

+1

你有没有找到答案?我也试图避免UIWebView字体内存的问题。 – 2012-07-07 13:24:11

回答

0

我们在我们的生产应用程序中观察到类似的问题。我创建了一个降低臭虫我反复清楚web视图(负载“<HTML> </HTML >”),然后加载以下URL在一个UIWebView的:

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

这之后约180可靠地崩溃应用负载。我已经向Apple提交了一份关于此问题的错误报告,问题ID为15659596,我正在等待回复。

但是,我仍然不清楚在什么情况下会发生这种情况,以及何时不发生。显然,它发生于那些URL,但我也测试了相同的过程:

  1. 相同的Web内容所观察到的问题,在野外我们的应用程序
  2. 一个谷歌图片搜索之类的字词“下大雨”。

在这两种情况下,都不会出现问题。我没有观察到长期的内存使用增长,应用程序也没有崩溃。

所以我没有给你任何答案,但我可以确认UIWebView存在一个问题,我已经向Apple报告了这个问题,并且确实看起来与Web字体有关。