0

我正在尝试了解 Firebase 存储。我在网上看到并尝试了两种获取图像的方法。这两者有什么区别?(两者都有效)。

因此,在我从 Firebase 数据库中获取 photoUrl 后:

1.

if let data = NSData(contentsOfURL: NSURL(string:photoUrl)!)
{
     let myImage = UIImage(data: data)!

     MyImageCache.sharedCache.setObject(myImage, forKey: self.key)
     //etc
 }

2.

 self.storage.referenceForURL(photoUrl).dataWithMaxSize(1 * 1024 * 1024) { (data, error) -> Void in
    if (error != nil)
    {
         print(error)
    }
    else
    {
        let myImage = UIImage(data: data!)

        MyImageCache.sharedCache.setObject(myImage!, forKey: self.key) 
        //etc       
    }
}
4

1 回答 1

0

关于第一种方法,您不应该将其用于网络调用。从文档:

不要使用这种同步方法来请求基于网络的 URL。对于基于网络的 URL,这种方法会在慢速网络上阻塞当前线程数十秒,导致用户体验不佳,并且在 iOS 中可能会导致您的应用被终止。相反,对于非文件 URL,请考虑使用 NSURLSession 类的 dataTaskWithURL:completionHandler: 方法。有关详细信息,请参阅 URL 会话编程指南。

第二种方法被烘焙到 firebase 框架中,并为您提供了下载图像的便捷方法,即它为您提供了指定图像大小的选项。这可能已针对获取图像进行了优化,并且在大多数情况下是首选方法。

于 2016-06-17T08:47:53.923 回答