84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
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 这个属性吗???