MKMapView 内存问题

MKMapView Memory Issues

所以我知道 MKMapView 有内存问题,所以为了解决这个问题,我一直在使用静态变量,这意味着我的应用程序中使用了一个 MKMapView。我遇到的问题是,当我调用我创建的函数来更新地图时,如果位置发生变化,我会看到内存增加。以下面的简单案例为例。我有一个 MK 地图视图和一个 UIButton,当点击它们时,它会移动地图的中心位置。每次点击它时,内存使用量都会增加,并比点击前高出 2-5 MB。有没有办法阻止这种内存增加?

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.setCamera(MKMapCamera(lookingAtCenter: coordinates[0], fromDistance: 5000, pitch: 45, heading: 0), animated: false)
}

@IBAction func updateMap(_ sender: Any) {
    mapView.showsCompass = true
    
    let correctedIndex = (selectedIndex % 7)
    
    let location = coordinates[correctedIndex]

    mapView.camera.centerCoordinate = location
    selectedIndex += 1
}

var selectedIndex = 1

var coordinates = [
    CLLocationCoordinate2D(latitude: 53.27, longitude: -7.77),
    CLLocationCoordinate2D(latitude: 52.63, longitude: -7.76),
    CLLocationCoordinate2D(latitude: 52.34, longitude: -2.16),
    CLLocationCoordinate2D(latitude: 50.27, longitude: 4.02),
    CLLocationCoordinate2D(latitude: 50, longitude: 13),
    CLLocationCoordinate2D(latitude: 50, longitude: 14),
    CLLocationCoordinate2D(latitude: 50, longitude: 15),
    CLLocationCoordinate2D(latitude: 50, longitude: 16),
]
@IBOutlet weak var mapView: MKMapView!

}

原来答案很简单,但有点烦人。

在移动相机之前将以下代码行添加到 updateMap 可以解决问题(之后可能会更好,但我现在不想回去做进一步的测试...)。

mapView.mapType = MKMapType.hybrid
mapView.mapType = MKMapType.standard

显然更改地图类型会清除缓存的地图图块。现在内存随着地图上要素的数量增加和减少。

注意:我不知道修复程序的真正作者,但我在这里找到了它: https://www.programmersought.com/article/6006585971/