如何从内存中卸载 GMSMapView?

Posted

技术标签:

【中文标题】如何从内存中卸载 GMSMapView?【英文标题】:How to unload GMSMapView from memory? 【发布时间】:2021-11-29 04:04:46 【问题描述】:

我有像这样的带有 GMSMapView(从情节提要连接)的 UIViewController

@IBOutlet weak var map: GMSMapView!

override func viewDidDisappear(_ animated: Bool) 
        super.viewDidDisappear(animated)
        
        self.map.delegate = nil
        self.map.clear()
        self.map.removeFromSuperview()
        self.map = nil
          
    

我也有

deinit print "DEINIT ME"

Deinit 有效 - 我看到了打印消息。

在应用程序运行期间,我必须多次加载和卸载此视图控制器。解雇 - 这是呈现的视图控制器。 每次我使用它 - 在内存中添加新的 GMSMapView。 我使用控制器十次 - 十个 GMSMapView 对象将在内存图中,因此这与巨大的内存泄漏有关。

当我关闭此视图控制器时,

【问题讨论】:

【参考方案1】:

viewDidDisappear 中的代码没用。地图视图已经被定义为弱,这意味着当视图控制器取消初始化时它将从内存中释放。如果取消初始化后视图控制器仍然存在,请检查您的内存图。如果视图控制器仍然存在,则视图控制器中的其他一些属性持有对视图控制器的强引用,与地图无关。 否则这可能是 GMSMap 框架中的问题。

【讨论】:

以上是关于如何从内存中卸载 GMSMapView?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GMSMapView 中删除默认标记

从 GMSMapView 中删除所有 GMSMarker?

如何在iphone中获取gmsmapview的坐标中心

如果从 Storyboard 添加约束,则 GMSMapView 不显示任何内容

如何在 GMSMapView 中获取动画折线路线,以便在移动地图时随地图一起移动?

如何防止'GMSMapView'无限水平滚动?