GMSMapView清除不清除内存

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (132)

我在我的应用程序中有一个GMSMapView。带有开放式地图屏幕的应用程序需要150 MB的内存。

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

调用方法[GMSMapView clear]后,所有多边形都消失了,但应用程序在内存中仍然需要230 MB。

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

提问于
用户回答回答于

Swift 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?

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

func configure() {
    mapView = GMSMapView()
    mapView?.delegate = self
}

3)布局并添加mapView到你的用户界面:

override func viewDidLoad() {
    super.viewDidLoad()

    if let mapView = mapView {
        mapViewContainer.addSubview(mapView)
        //Create constraints as you wish
        mapView.fillView()
        mapViewContainer.layoutSubviews()
    }
}

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
}

你可以在ViewDidDisappear中调用它,或者调用委托.

releaseMemory() 功能清晰的内存,不那么聪明,但它的工作原理。

用户回答回答于

可以尝试将多边形对象存储在某个地方,然后调用polygon.map = nil所有这些对象,删除多边形引用,然后调用地图视图clear

所属标签

可能回答问题的人

  • 女淘日记

    杭州吱吱吱科技 · 站长 (已认证)

    1 粉丝1 提问3 回答
  • 朝夕熊博客

    1 粉丝2 提问3 回答
  • 无聊至极

    6 粉丝504 提问2 回答
  • 无心道人

    30 粉丝7 提问2 回答

扫码关注云+社区

领取腾讯云代金券