字形/ UIWebView中的内存泄漏问题

8
我发现当UIwebview被dealloc时,它所使用的大部分内存并没有完全回收。经过一些分析,我发现大部分依然存在的内存是字体字形缓存(如果打开中文网页问题会更严重,因为中文有更多的字符,意味着更多的字体字形)。
有没有办法我们可以控制这个缓存?我正在开发一个iOS浏览器,这个问题困扰了我2周。
附上一个简单的演示程序:链接地址。 1)使用“Allocation profile”进行内存调试。 2)在地址栏输入http://www.163.com并等待其加载完成。 3)你可以看到大约消耗了10M的内存。 4)点击清除按钮(UIwebview将从视觉树中删除并被回收) 5)你仍然可以看到大约9M的内存存在。
顺便说一下,NSURLCache被禁用了,代码如下,以分隔问题。 [[NSURLCache sharedURLCache] setMemoryCapacity: 1]

我正在尝试研究移动Safari如何处理这个问题。有没有办法用otool打印导入符号表?otool -ov可以打印出应用程序中定义的所有符号,但我想知道该应用程序从其他动态库链接了哪个符号。我使用class-dump-z转储所有头文件,但没有得到任何有用的信息。 - jim.huang
实际问题在CoreGraphics的draw_glyphs函数中,经过CGFontCreateGlyphBitmap后,位图被缓存了,我们无法控制缓存。这不是一个泄漏问题,但在iPad1上对于我的应用程序(有大量文本)确实是一个问题。 - jim.huang
1
你有找到这个问题的答案吗?我也在尝试避免UIWebView字体内存方面的问题。 - Rik Smith-Unna
@jim.huang,附加演示的链接已经失效。我认为我遇到了与无法从UIWebView中完全回收内存使用相同的问题。 - safwanc
1个回答

0
我们在生产应用程序中观察到类似的问题。我创建了一个缩小版的错误,其中我反复清除Web视图(加载“<html></html>”),然后在UIWebView中加载以下URL:
http://typecast.com/preview/google/Mr%20Bedfort/Sigmar%20One/Miss%20Fajardose

这会在大约180次加载后可靠地导致应用程序崩溃。我已向苹果提交了一个问题报告,编号为15659596,并正在等待回复。

然而,我仍然不清楚它发生的确切情况和不发生的情况。显然,它会发生在那个URL上,但我也使用以下相同的过程进行了测试:

  1. 我们应用程序中观察到问题的相同网页内容
  2. 搜索“猫”和“狗”之类的词汇的Google图像搜索。

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

所以我没有任何答案给你,但我可以确认UIWebView存在问题,我已经向苹果报告了这个问题,并且它似乎与Web字体有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接