我刚刚发现当UIwebview被解除分配时,它使用的大部分内存都没有完全回收。在做了一些配置文件之后,我发现大部分仍然存活的内存是字体字形缓存(如果你打开一个中文网页,问题会更严重,因为中文有更多的字符,这意味着更多的字体字形)。
我们有什么办法可以控制缓存吗?我正在使用iOS网络浏览器,这个问题阻止了我2周。
Attached是一个简单的repro演示。 1)运行带有内存“分配配置文件”的演示。 2)在地址栏中输入http://www.163.com并等待它完成加载。 3)您可以看到仪器工具消耗的大约10M内存。 4)单击清除按钮(UIwebview将从可视树中删除并获得回收) 5)你仍然可以看到大约9M的记忆。
BTW,使用以下代码禁用NSURLCache,以分离问题。 [[NSURLCache sharedURLCache] setMemoryCapacity:1]
答案 0 :(得分:0)
我们在生产应用中发现了类似的问题。我创建了一个减少错误的地方,我反复清除网页视图(加载“< html>< / html>”),然后在UIWebView中加载以下网址:
http://typecast.com/preview/google/Mr%20Bedfort/Sigmar%20One/Miss%20Fajardose
在大约180次加载后,这可靠地使应用程序崩溃。我已向Apple提交了错误报告,问题ID为15659596,我正在等待回复。
然而,我仍然不清楚这种情况究竟发生在什么情况下,何时不发生。显然,它发生在该URL上,但我也用以下方法测试了相同的程序:
在这两种情况下,问题都没有出现。我发现没有长期的内存使用量增长,应用程序也不会崩溃。
所以我没有任何答案,但我可以确认UIWebView存在问题,我已经向Apple报告了这个问题,而且它似乎与网络字体有关。