iOS开发资料收集区

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

2018-08-14  本文已影响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;
}

以上。

上一篇下一篇

猜你喜欢

热点阅读