inv*_*ent 6 svg instruments uiwebview memory-pressure ios
我正在制作一个"交互式地图",类似于这个例子.我需要能够放大地图并仍然得到一个干净的插图,因此地图的绘制是在svg中完成的(它实际上是在Illustrator中创建的,然后保存为svg文件).
在应用程序中,我创建一个UIWebView并加载包含svg的html.HTML文件是应用程序中的捆绑包资源,因此没有网络延迟.有点击形状,当你点击它们时,它会带你到另一个地图(另一个带有svg绘图的html页面).
其中一个svg相当大(~5.8MB).加载时,我收到"内存压力"警告,然后崩溃.仪器显示虚拟内存为298.71MB,真实内存为149.10MB.
我已经简化了绘图(我拿出了一些细节),我还使用了@Peter Collingridge svg优化器.
如何优化内存使用,以免崩溃?
我解决了我的问题:
viewWillAppear:在调用之前,我正在我的方法中创建 webview [super viewWillAppear:animated]。我最初这样做是因为我有一个超类,它为我拥有的所有不同地图实例化公共元素,这样元素就以正确的顺序出现。对 super 的调用现在先于其他任何事情完成,并且我将元素放在前面。
我现在将我的 webview 设置为 nil,然后再创建并推送另一个地图(因此另一个包含其他内容的 webview)。
第一个网络视图是由故事板创建的。现在一切都用代码完成了。
地图的绘图已被简化,因此文件的大小更轻。(细节较少)
内存报告显示,已使用内存目前约为 81.9 Mb(第 5 代 iPod Touch 上可用内存的 16.2%)。
我发现很奇怪的是,我有一个(相当)小的 svg 文件的内存压力警告。此外,该仪表显示的百分比从未高于 50%。我没有考虑 JS 引擎和 webview 内存限制。(据说 Javascript 引擎将在 iOS 8 中获得全部功能,如此处报道)。(我找不到任何有关内存限制的官方文档,可能是因为它似乎因设备而异。请参阅此答案。)
最后,在我的 iPhone 4s 或 iPod Touch 5 代上加载页面仍然很长,但它可以工作。如果您想提出更好的方法来实现这种地图,欢迎您这样做。
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |