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

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學習者快速成長!