RPl*_*lay 2 google-maps objective-c ios google-maps-sdk-ios gmsmapview
我的应用中有一个 GMSMapView。带有开放地图屏幕的应用程序占用 150 mb 内存。
在某些时候,我添加了很多多边形。之后,应用程序需要 230 mb。
调用 [GMSMapView clear] 方法后,所有多边形都消失了,但应用程序仍占用 230 mb 的内存。
指向多边形的指针不会存储在其他任何地方。如何使地图清除内存以及为什么在调用“清除”方法后不会发生这种情况?
好吧,这真是太痛苦了……我没有找到官方文档。
我的解决方案:
斯威夫特 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() 功能清除记忆,不是那么聪明,但它的工作原理。