【发布时间】:2012-03-13 11:13:26
【问题描述】:
我刚刚发现当 UIwebview 被释放时,它使用的大部分内存并没有被完全回收。在做了一些配置文件后,我发现大部分还活着的内存是字体字形缓存(如果你打开一个中文网页,问题会更糟,因为中文有更多的字符,这意味着更多的字体字形)。
有什么方法可以控制缓存吗?我正在使用 iOS 网络浏览器,这个问题阻止了我 2 周。
Attached 是一个简单的重现演示。 1) 使用内存“分配配置文件”运行演示。 2) 在地址栏中输入http://www.163.com 等待加载完成。 3)可以看到instrument工具消耗了大约10M内存。 4)点击清除按钮(UIwebview将从可视化树中移除并被回收) 5) 你仍然可以看到大约 9M 内存。
顺便说一句,NSURLCache 被下面的代码禁用,以分离问题。 [[NSURLCache sharedURLCache] setMemoryCapacity:1]
【问题讨论】:
-
我正在尝试调查 Mobile safari 如何处理此问题。有什么办法可以用 otool 打印导入符号表? otool -ov 打印此应用程序中定义的所有符号,但我想知道此应用程序从其他动态库链接的符号。我使用class-dump-z转储所有头文件,但没有得到任何有用的信息。
-
实际问题在CoreGraphics中的draw_glyphs,在CGFontCreateGlyphBitmap之后,位图被缓存了,我们无法控制缓存。这不是泄漏,但在 iPad1 上,这对我的应用程序来说确实是个问题(有很多文字)
-
你找到答案了吗?我也在尝试避免 UIWebView 字体内存问题。
-
@jim.huang 附加演示的链接已损坏。我想我在Unable to Completely Reclaim Memory Usage from UIWebView 遇到了完全相同的问题。
标签: caching memory-leaks fonts uiwebview glyph