swift - 从 Firebase 下载的图像在大小仅为 200-400kb 时不知何故占用了 28mb 内存

标签 swift firebase uiimage firebase-storage nscache

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

这是怎么回事?这是一些可能有帮助的代码?:

类 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)
                    }
                }
            }
        })
    }
}
}

最佳答案

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

关于swift - 从 Firebase 下载的图像在大小仅为 200-400kb 时不知何故占用了 28mb 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864348/

相关文章:

swift - 将数据从flutter传递到原生IOS

ios - UIFont 为自定义字体返回 nil

android - 当应用程序被终止时未收到通知 FCM 与 Firebase 的 Cloud Functions

node.js - GitHub Action 构建 firebase 应用程序失败 w9jds/firebase-action

ios - 如何在 Objective-C 的 AlertView 中通过 http url 显示图像?

ios - 如何修复此社交媒体 View 共享 (iOS)?

ios - Xcode 10 UI 测试原因 : Image Not Found with Cocoapods

objective-c - 快速展开的解决方法

android - Firebase Firestore toObject()不适用于数据类

swift - CIImage 的 PNG/JPEG 表示形式始终返回 nil