地图 - ios的MKMapView在缩放时内存暴涨
PHP中文网
PHP中文网 2017-04-17 17:26:18
0
3
513

ios的mkmapview在zoom时内存会暴涨,并且降不下来。
我在网上搜了很多,也尝试了很多解决方案,比如切换地图显示模式(MKMapType)、不用时释放掉地图。但是并没有明显的解决缩放时的内存问题。

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답 (3)
阿神

这个内存会暴涨到大几十兆吧,是正常的。

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

    这样可以有效降低内存峰值。

    因为当地图缩小到一定范围,上面的商铺之类的细节早就应该清除掉,以节省内存。

      Ty80

      在mapview的regionDidChange方法中,判断map.zoomLevel如果小于一定范围就交替mapType

      这样可以有效降低内存峰值。
      是怎么做的?????mapView 有 zoomLevel 这个属性吗???

        최신 다운로드
        더>
        웹 효과
        웹사이트 소스 코드
        웹사이트 자료
        프론트엔드 템플릿
        회사 소개 부인 성명 Sitemap
        PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!