use*_*264 13 google-maps-sdk-ios
我的应用程序在子视图中使用GMSMapView,内存使用情况如下:
据我所知,没有任何泄漏.问题是,我得到了内存警告,并经常关闭应用程序.显然,GoogleMaps正在使用应用程序内存中的大部分内容.我怎样才能在didReceiveMemoryWarning()中发布一些内容?
是否可以在应用程序中安装Google地图并管理其内存使用,至少足以防止其导致内存关闭?
这是GoogleMaps-iOS-1.3.0.
更新:
我的记忆数据很少(使用Allocations Instrument而不是Activity Monitor).这是正确的值:
这显然是256 MB RAM设备(例如iPod Touch 4G)的"故障"范围,并解释了内存警告和偶尔踢.
有没有人在256 MB设备上的应用程序中成功运行谷歌地图?
小智 11
尝试在视图控制器中使用此代码:
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated] ;
[m_mapView clear];
[m_mapView stopRendering] ;
[m_mapView removeFromSuperview] ;
m_mapView = nil ;
}
Run Code Online (Sandbox Code Playgroud)
我试过这个,它确实释放了一些GMSMapView记忆.
maps API使用大小为256 x 256像素的图块.它们以每像素32位纹理的形式加载到内存中,因此每个图块使用256 x 256 x 4 = 256kb.
如果你的iPad是1024 x 768,那么你需要4 x 3 = 12个瓷砖= 3MB.然而,这只有在您的视图恰好与切片边界完全对齐时 - 实际上它将跨越边界,因此您可能需要5 x 4 = 20个切片= 5MB.
但是,如果缩小到几乎显示下一个较低缩放级别的点,则每个图块的绘制幅度将超过其全尺寸的一半,因此您需要10 x 8 = 80个图块= 20MB.
然后,如果你有一个Retina设备,它实际上会加载下一个更高的缩放级别的图块,因此每个维度需要两倍的数量(以匹配屏幕的像素而不是点),因此你需要20 x 16 = 320个图块= 80MB.
iPhone 5的类似计算可以达到240个瓦片= 60MB.
因此,如果您计算地图仅需要用于内容的内存量,不计算用于内部处理的任何开销或其他内存,那么它可以解决很多问题.所以你可能无能为力.当存在内存压力时,地图SDK已经释放了未使用的切片 - 但它无法释放渲染当前视图所需的切片.
这意味着您唯一的选择可能是减少自己代码中的内存使用量.
对于我的应用程序,我不得不改变它在iPad 1上的工作方式,因为它耗尽内存并且经常崩溃.对于其他设备,我发现它工作正常.
可能的解决方法的一些想法可能是减小地图视图的大小,或将缩放级别捕捉到整数值.这对用户来说都不是很好,但它们可能有助于避免崩溃.
| 归档时间: |
|
| 查看次数: |
9037 次 |
| 最近记录: |