GMSMapView clear 不清除内存

RPl*_*lay 2 google-maps objective-c ios google-maps-sdk-ios gmsmapview

我的应用中有一个 GMSMapView。带有开放地图屏幕的应用程序占用 150 mb 内存。

在某些时候,我添加了很多多边形。之后,应用程序需要 230 mb。

调用 [GMSMapView clear] 方法后,所有多边形都消失了,但应用程序仍占用 230 mb 的内存。

指向多边形的指针不会存储在其他任何地方。如何使地图清除内存以及为什么在调用“清除”方法后不会发生这种情况?

Zan*_*ael 5

好吧,这真是太痛苦了……我没有找到官方文档。

我的解决方案:

斯威夫特 3.0

1)不要使用Storyboard,在代码中创建mapView:

@IBOutlet weak fileprivate var mapViewContainer: UIView!

weak fileprivate var mapView: GMSMapView? {
    didSet { 
        //you can config and customise your map here
        self.configureMapView() 
    }
}

//If you use clustering
fileprivate var clusterManager: ClusterManager?
fileprivate var clusterRenderer: ClusterRenderer?
Run Code Online (Sandbox Code Playgroud)

2) 创建 viewController 配置函数并在 viewDidLoad 之前调用它:

func configure() {
    mapView = GMSMapView()
    mapView?.delegate = self
}
Run Code Online (Sandbox Code Playgroud)

3) 布局并将 mapView 添加到您的 UI:

override func viewDidLoad() {
    super.viewDidLoad()

    if let mapView = mapView {
        mapViewContainer.addSubview(mapView)
        //Create constraints as you wish
        mapView.fillView()
        mapViewContainer.layoutSubviews()
    }
}
Run Code Online (Sandbox Code Playgroud)

4)现在创建函数:

func releaseMemory() {

    if
        let mapView = mapView,
        let clusterManager = clusterManager {

        clusterManager.clearItems()
        mapView.clear()
        mapView.delegate = nil
        mapView.removeFromSuperview()

    }

    clusterManager = nil
    clusterRenderer = nil
    mapView = nil
}
Run Code Online (Sandbox Code Playgroud)

你在ViewDidDisappear中调用它,或者调用delegate...

releaseMemory() 功能清除记忆,不是那么聪明,但它的工作原理。