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/
所以我知道 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/