Google在SWIFT 4中的UITableViewCell上出现内存管理问题

时间:2018-11-17 17:56:49

标签: ios swift uitableview google-maps-sdk-ios

我实现的方式是:

我有一个笔尖:UITableViewCell,并且有一个Google地图,其中实现了两个标记以及两个标记之间的路径。

当我在UItableView上运行带有示例8个单元格的程序时,由于出现由于内存管理问题导致的应用退出

,该程序有时会崩溃

在笔尖文件“ BookingHistoryTableViewCell”

line.setOnMousePressed(e -> {
    // something
});

line.setOnMouseDragged(e -> {
    // another thing
});

然后在 MyBookingsViewController 上的tableViews上:

import UIKit
import Google
import GoogleMaps
import GoogleMapsCore
import GooglePlaces
import GoogleToolboxForMac

class BookingHistoryTableViewCell: UITableViewCell {

    //MARK: Outlets
    @IBOutlet weak var bottomView: UIView!
    @IBOutlet weak var mapView: GMSMapView!

    override func awakeFromNib() {
        super.awakeFromNib()
        self.bottomView.layer.shadowColor = UIColor(displayP3Red: 0, green: 0, blue: 0, alpha: 1).cgColor
        self.bottomView.layer.shadowRadius = 3
        self.bottomView.layer.shadowOpacity = 1
        self.bottomView.layer.shadowOffset = CGSize(width: 0, height: 0)
    }

    //main gate : 6.795046, 79.900768
    func setupMap(){
        let lat = 6.797222
        let lon = 79.902028
        let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lon, zoom: 17.0)
        let googleMapView = GMSMapView.map(withFrame: self.mapView.bounds, camera: camera)
//        googleMapView.isMyLocationEnabled = true
//        googleMapView.settings.tiltGestures = false
//        googleMapView.settings.zoomGestures = false
//        googleMapView.settings.scrollGestures = false
//        googleMapView.accessibilityScroll(UIAccessibilityScrollDirection.left)
//        googleMapView.mapStyle(withFilename: "googleMapsStyle02", andType: "json")
        self.mapView.addSubview(googleMapView)
        //(googleMapView, at: 0)

        let marker = GMSMarker()
        marker.position = CLLocationCoordinate2DMake(lat, lon)
        marker.title = "Main Title"
        marker.snippet = "Deescription"
        marker.map = googleMapView
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        //self.setupMap()
    }

    override func layoutIfNeeded() {
        super.layoutIfNeeded()
        self.setupMap()
    }

    override func setNeedsLayout() {
        super.setNeedsLayout()
//        self.setupMap()
    }



    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }

}

然后作为扩展,我有了表控件:

viewDidLoad(){
  self.tableView.register(UINib(nibName: "BookingHistoryTableViewCell" , bundle: nil), forCellReuseIdentifier: "BookingHistoryTableViewCell")
        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 30
}

这是必需的,在现实生活中,将有100个这样的细胞。有什么方法可以只将可见的单元格渲染到显示区域,也可以通过某种方法来保存内存?

1 个答案:

答案 0 :(得分:0)

我的建议是不要在每个单元中实现一个映射。我遇到了同样的麻烦,但是区别在于我正在使用Apple Maps。 Apple MapView可以显示不同的内容(建筑物,3D视图,位置...)。如果您在Google Maps中有某种此类元素,请尝试将其停用。

在我的应用中,使用的RAM从300更改为165。

Elements to deactivation MKMapView