8

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

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

附件是一个简单的重现演示。1) 使用内存“分配配置文件”运行演示。2) 在地址栏输入http://www.163.com等待加载完成。3)可以看到instrument工具消耗了大约10M内存。4)单击清除按钮(UIwebview 将从可视化树中删除并被回收) 5)您仍然可以看到大约 9M 内存。

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

4

1 回答 1

0

我们在生产应用程序中观察到类似的问题。我减少了重复清除 Web 视图(加载“<html></html>”)然后在 UIWebView 中加载以下 URL 的错误:

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

这在大约 180 次加载后可靠地使应用程序崩溃。我已向 Apple 提交了一份错误报告,问题 ID 为 15659596,我正在等待回复。

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

  1. 在我们的应用程序中观察到该问题的相同 Web 内容
  2. 搜索“猫”和“狗”等术语的 Google 图片搜索。

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

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

于 2013-12-16T19:11:35.137 回答