iOS - Firebase存储下载非常慢

时间:2016-08-20 23:22:41

标签: ios swift firebase

我正在为我的应用使用Firebase Storage。在我的应用中,用户有个人资料,可以上传个人资料照片,然后当他们将来点击他们的个人资料时,它应该下载并显示他们的个人资料照片。问题是,当我上传和下载照片时,会出现明显的延迟,并且看起来代码没有运行。对于下载,我在我的ViewWillAppear()中进行了呼叫,但是即使在屏幕加载并且我点击其他内容后它仍继续运行。我怎样才能加快速度呢?不仅延迟很烦人,而且当我移动到另一个视图或注销并且ViewWillAppear()中的代码仍在运行时,它会导致崩溃。

override func viewWillAppear(bool: Bool) {

    var retPic : UIImage
    let storage = FIRStorage.storage()

    let storageRef = storage.referenceForURL("gs://project-xxxxxxxxxxx.appspot.com")

    let profPicRef = storageRef.child("images/" + (FIRAuth.auth()?.currentUser?.uid)! + ".jpg")
    // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)

    profPicRef.dataWithMaxSize(1 * 4096 * 4096) { (data, error) -> Void in
        if (error != nil) {
            print(error)
        } else {
            // Data for "images/island.jpg" is returned
            print("This is delayed")
            self.retPic = UIImage(data: data!)!
            self.imageView.image = self.retPic
                     print("still here")
            self.imageView.reloadInputViews()   
        }
    }
}

2 个答案:

答案 0 :(得分:1)

它很可能是a的组合:a)你尝试下载的数据有多大,b)你在哪种网络上,c)你在哪里?重新定位,和d)你对"慢"的定义是什么?是。 :)

那说,一张普通的iPhone照片"真的是怪异的'例如,iPhone 6s可以拍摄4032 x 3024的照片。我的猜测是你的imageView比这个要小得多。因此,有一项建议是根据您认为最终需要的图片大小,在上传 之前调整图片大小。

我同意Frank的看法,将downloadURLSDWebImagePINRemoteImageAlamoFireImage这样的库结合使用可能是一个好主意。这些库负责处理重要任务,例如加载主线程,缓存,如果目标imageView突然消失,通常不会崩溃。

答案 1 :(得分:-1)

将NSData转换为UIImage时应使用后台线程,或者您可以获取图像URL并使用Kingfisher pod。我更喜欢第二种选择。

Swift3版本:

import Kingfisher

profPicRef.downloadURL(completion: { (url, error) in

   if error != nil {

       print(error)
   }
   else{

       let retPicUrl = (url?.absoluteString)! as String

    self.imageView.kf.setImage(with: URL(string: retPicUrl)!)
    self.imageView.reloadInputViews() 

   }
 })