84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
ios的mkmapview在zoom时内存会暴涨,并且降不下来。我在网上搜了很多,也尝试了很多解决方案,比如切换地图显示模式(MKMapType)、不用时释放掉地图。但是并没有明显的解决缩放时的内存问题。
认证高级PHP讲师
这个内存会暴涨到大几十兆吧,是正常的。
mapview使用的是tiledLayer(瓦片Layer),为了渲染速度,会在内存中缓存地图的图块。缩放的时候,地图图块在不同层次都会缓存。
我猜想内存吃紧的时候,MKMapView应该会自己清理缓存,所以我觉得不用操心这个题。
PS:1 这是stackoverflow给的方案,真不明白为啥。
- (void)applyMapViewMemoryHotFix{ switch (self.mapView.mapType) { case MKMapTypeHybrid: { self.mapView.mapType = MKMapTypeStandard; } break; case MKMapTypeStandard: { self.mapView.mapType = MKMapTypeHybrid; } break; default: break; } self.mapView.mapType = MKMapTypeStandard; } -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated { [self applyMapViewMemoryHotFix]; }
PS:
个人更倾向于
override func viewDidDisappear(animated: Bool) { super.viewDidDisappear(animated) mapView.removeFromSuperview() }
在viewDidDisappear方法中把map释放,然后在需要他的时候,重新初始化。
已找到解决方案:
在mapview的regionDidChange方法中,判断map.zoomLevel如果小于一定范围就交替mapType
这样可以有效降低内存峰值。
因为当地图缩小到一定范围,上面的商铺之类的细节早就应该清除掉,以节省内存。
这样可以有效降低内存峰值。是怎么做的?????mapView 有 zoomLevel 这个属性吗???
这个内存会暴涨到大几十兆吧,是正常的。
mapview使用的是tiledLayer(瓦片Layer),为了渲染速度,会在内存中缓存地图的图块。
缩放的时候,地图图块在不同层次都会缓存。
我猜想内存吃紧的时候,MKMapView应该会自己清理缓存,所以我觉得不用操心这个题。
PS:1 这是stackoverflow给的方案,真不明白为啥。
PS:
个人更倾向于
在viewDidDisappear方法中把map释放,然后在需要他的时候,重新初始化。
已找到解决方案:
在mapview的regionDidChange方法中,判断map.zoomLevel如果小于一定范围就交替mapType
这样可以有效降低内存峰值。
因为当地图缩小到一定范围,上面的商铺之类的细节早就应该清除掉,以节省内存。
在mapview的regionDidChange方法中,判断map.zoomLevel如果小于一定范围就交替mapType
这样可以有效降低内存峰值。
是怎么做的?????mapView 有 zoomLevel 这个属性吗???