【发布时间】:2021-09-17 17:48:45
【问题描述】:
在我的项目中,我使用 mapView 来呈现从 API 接收到的 Lat-Lon 位置。我的项目有一个按钮,它执行以下操作:
- 单击时,它会触发一个计时器,该计时器从网络检索坐标,然后在地图视图上绘图
- 再次单击时,它会停止计时器并且不会检索任何数据。
但是,即使计时器停止,它也会消耗大约 100mbs 的大量内存,如果不是更多的话。所以我想在用户不使用地图时释放内存,当他们使用地图时应该再次回来。我做了以下释放内存:
self.mapView.delegate = nil;
self.mapView.removeFromSuperview()
self.mapView = nil;
这会删除地图,我的内存恢复到 20mbs,正常。然而这是释放内存的正确方法吗? 按下按钮后如何找回它?
【问题讨论】:
-
是的,这是正确的。 MapView 的资源非常繁重,这就是为什么它会消耗大量内存,因此如果您正在做一些繁重的事情,内存使用量增加 100+ Mb 是很正常的
-
@VisalRajapakse 好的,谢谢您的确认。一旦我做了self.mapView = nil。它删除了地图,之后我该如何取回它?
-
你在使用
Storyboards吗?如果是这样,删除delegate应该可以解决问题,因为 ARC 将为您完成剩下的工作。如果您以编程方式执行此操作,则可以在viewWillAppear(_:)方法中的地图视图上使用addSubview(_:)并在viewDidDisappear(_:)中取消初始化地图视图。此外,如果您想确定您的 ViewController 已取消初始化,请添加带有嵌入式打印语句的deinit()方法。根据我的经验,阻止 Viewcontroller 被取消初始化的代表
标签: ios swift memory-management mkmapview