从Firebase下载的图像以某种方式占用28mb的内存,当它们的大小只有200-400kb时

时间:2017-03-17 18:04:31

标签: swift firebase uiimage firebase-storage nscache

我正在使用Firebase来托管和下载我的应用的图片。 Firebase上的每个图像范围为200kb-400kb,用户在滚动浏览collectionView时一次下载约12个图像。当我启动下载图像的VC时,我的应用程序从使用大约100mb的内存到650mb的内存,总共下载了19个图像。问题中的图像是JPEG,并且在上传到Firebase之前已经过大量压缩。这些映像存储在NSCache中,清除缓存会将内存使用量降低到100mb左右。

发生了什么事?以下是一些可能有用的代码?:

class TripOverviewCell:UICollectionViewCell {

@IBOutlet weak var imageView: UIImageView!

func updateUI(photo:Photo, image:UIImage? = nil) {
    //Call when preparing to show image
    if image != nil {
        print("Loaded from cache")
        imageView.image = image
        photo.assignImage(image: image!)
    } else {
        let url = photo.imageUrl
        let ref = FIRStorage.storage().reference(forURL: url)
        ref.data(withMaxSize: 5*1024*1024, completion: { [weak self] (data, error) in
            if error != nil {
                print("Unable to download image")
            } else {
                print("Image downloaded")
                if let imageData = data {
                    if let image = UIImage(data: imageData) {
                        self?.imageView.image = image
                        photo.assignImage(image: image)
                        TripsVC.imageCache.setObject(image, forKey: photo.uid as NSString)
                    }
                }
            }
        })
    }
}
}

1 个答案:

答案 0 :(得分:0)

正如弗兰克评论的那样,显示的图像占用的空间比图像数据多得多。我的错误在于我正在缓存UIImages,这是完整显示的图像。相反,我应该缓存数据,然后从我需要它们的数据创建图像。内存使用量从550mb降至约20mb。