从 MapView 释放内存

Releasing Memory from MapView

在我的项目中,我使用 mapView 渲染从 API 接收到的 Lat-Lon 的位置。我的项目有一个执行以下操作的按钮:

  1. 点击后,它会触发一个计时器,从网络上检索坐标,然后在地图视图上绘制
  2. 再次单击时,它会停止计时器并且不会检索任何数据。

然而,即使计时器停止,它也会消耗大量内存,大约 100mbs,甚至更多。所以我想在用户不使用地图时释放内存,而当他们使用地图时应该再次使用。我做了以下释放内存:

            self.mapView.delegate = nil;
            self.mapView.removeFromSuperview()
            self.mapView = nil;

这删除了地图,我的内存恢复到 20mbs,正常。但是这是释放内存的正确方法吗按下按钮后如何取回它

要添加地图,您可以这样做

导入 UIKit 导入 MapKit

class ViewController: UIViewController {

var mapView: MKMapView?

@IBOutlet weak var framer: UIView!//uiview to put map into

var coordinate = CLLocationCoordinate2D(){
    willSet{
        print("removing annotation...")
        if let m = mapView{
        m.removeAnnotation(anno)
        }
    }
    didSet{
        print("did set called, adding annotation...")
        
        anno.coordinate = coordinate
        if let m = mapView{
        m.addAnnotation(anno)
        }
    }
}

override func viewDidLoad() {

    
    super.viewDidLoad()        
}
    @IBAction func start(_ sender: Any) {
        let mk = MKMapView()
        
        mk.bounds = framer.bounds
        
        mk.mapType = MKMapType.standard
        mk.isZoomEnabled = true
        mk.isScrollEnabled = true
        
        // Or, if needed, we can position map in the center of the view
        mk.center = framer.center
        mapView = mk
        if let mk2 = mapView{
        framer.addSubview(mk2)
    }
}

删除

    @IBAction func stop(_ sender: UIButton) {
        
        if  mapView != nil{
            if let mk2 = mapView{
                mk2.delegate = nil;
                mk2.removeFromSuperview()
                mapView = nil;
                
    }
        }
    }
}