【问题标题】:Memory Leak when using Fire Base Storage Download使用 Fire Base 存储下载时出现内存泄漏
【发布时间】:2020-09-17 03:20:21
【问题描述】:

我有一个程序,它有两个选项卡,每个选项卡都有自己的视图控制器运行。第二个选项卡是一个显示按钮的基本屏幕,而第一个选项卡是一个UICollectionView,其中显示了几个具有图像和标签的UICollectionViewCells。

从UICollectionView 选项卡切换到另一个选项卡时,我似乎有非常大的内存泄漏。我已经确定两个视图控制器都正确地点击了deinit,而我的UICollectionViewCells 也在取消初始化,所以我认为问题在于我如何提取数据。似乎 firebase 调用和它返回的图像永远不会被释放。

有人可以帮我弄清楚我做错了什么吗?

UICollectionViewCell 定义如下

class InteractionViewCell: UICollectionViewCell {
    
    @IBOutlet weak var Photo: UIImageView!
    var Id:String?
    @IBOutlet weak var personLabel: UILabel!
    func configure(_ person:Person) {
        self.Id = person:Person.id
        FirebaseInstance.GetPersonProfilePicture(person.id) { image in
            self.Photo.image = image
        }
    }
}

而GetPersonProfilePicture 是:

class FirebaseInstance {
    static private let StorageInst:StorageReference = Storage.storage().reference()
    static var StorageRef:StorageReference = StorageInst
    static private let ImageMaxSize = Int64(1 * 1024 * 1024)

    static func GetPersonProfilePicture(_ userUID:String, completion: @escaping (UIImage) -> Void) {
        StorageRef.child("\(userUID)").getData(maxSize: ImageMaxSize) { data, error in
            if let error = error {
                print(error.localizedDescription)
                return
            } else {
                let downloadedImage = UIImage(data: data!)
                completion(downloadedImage!)
            }
        }
    }

编辑:如果我删除保存个人资料图片的行,内存泄漏就会消失,这更能证明内存泄漏似乎与我下载图像的方式有关。

提前谢谢你!

【问题讨论】:

    标签: swift google-cloud-firestore firebase-storage uicollectionviewcell collectionview


    【解决方案1】:

    啊!我想到了。这实际上与我下载图像的方式完全无关。

    我的问题是我通过在Cloud Firestore 中的collection 上调用.addSnapshotListener 来检索单元格。但是,我从未移除过侦听器,这意味着我的 UICollectionView 从未被取消初始化,这导致了巨大的内存泄漏。

    通过在第一个控制器的viewWillDisapper 内调用mySnapshotListener.remove(),我能够摆脱内存泄漏。

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多