美文网首页iOS开发资料收集区
iOS高德地图内存优化之——单例地图

iOS高德地图内存优化之——单例地图

作者: 不会写代码的尬先生 | 来源:发表于2018-08-14 17:36 被阅读46次

    集成过高德地图的猿猿们应该都清楚,创建地图内存消耗非常大,而且加载过的地图内存一直得不到释放,如果项目中频繁用到地图会出现内存爆炸,最好是用单例创建。

    YLAMapViewSingle派生自NSObject,.h&.m代码如下

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface YLAMapViewSingle : NSObject
    
    +(YLAMapViewSingle *)sharedMapView;
    
    @property (nonatomic, strong) MAMapView *mapView;
    
    @end
    
    NS_ASSUME_NONNULL_END
    

    我这里的处理是,只负责创建地图,地图样式在具体使用的地方设置,当然每个应用的使用场景不同,比如我们的应用中有的页面使用A样式有的页面使用B样式,因为用单利会缓存之前地图设置的属性,故要在指定页面单独设置属性。
    如果是应用内地图统一样式,可以在单例这里直接设置属性,这样用起来就方便多了。

    #import "YLAMapViewSingle.h"
    @implementation YLAMapViewSingle
    
    +(YLAMapViewSingle *)sharedMapView
    {
        static YLAMapViewSingle  *single = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            single = [[YLAMapViewSingle alloc] init];
            single.mapView = [MAMapView new];
        });
        //清除大头针和轨迹是因为有可能带有上个地图的UI
        if (single.mapView.overlays.count)
        {
            [single.mapView removeOverlays:single.mapView.overlays];
        }
        
        if (single.mapView.annotations)
        {
            [single.mapView removeAnnotations:single.mapView.annotations];
        }
        return single;
    }
    

    使用YLAMapViewSingle

    #pragma mark - lazy load
    -(MAMapView *)mapView
    {
        if (!_mapView) {
            _mapView                          = [YLAMapViewSingle sharedMapView].mapView;//获取单例地图
            _mapView.autoresizingMask         = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
            _mapView.rotateCameraEnabled      = NO;//禁用倾斜手势
            _mapView.rotateEnabled            = NO;//禁用旋转手势
            _mapView.showsIndoorMap           = NO;//YES:显示室内地图
            _mapView.zoomLevel                = 19;//缩放级别(默认3-19)
            _mapView.showsScale               = NO;//设置成NO表示不显示比例尺
            _mapView.showsCompass             = NO;//设置成NO表示关闭指南针
            _mapView.showsLabels              = NO;
            _mapView.customizeUserLocationAccuracyCircleRepresentation = YES;
            NSString *path = [NSString stringWithFormat:@"%@/MaMapYuanShanDai.data", [NSBundle mainBundle].bundlePath];
            NSData *data = [NSData dataWithContentsOfFile:path];
            [_mapView setCustomMapStyleEnabled:YES];
            [_mapView setCustomMapStyleWithWebData:data];
            ///把地图添加至view
            [self.view addSubview:_mapView];
            [_mapView mas_makeConstraints:^(MASConstraintMaker *make) {
                make.edges.mas_equalTo(UIEdgeInsetsMake(0, 0, 0, 0));
            }];
        }
        return _mapView;
    }
    

    以上。

    相关文章

      网友评论

        本文标题:iOS高德地图内存优化之——单例地图

        本文链接:https://www.haomeiwen.com/subject/yfgvbftx.html