ios - 从 URL 下载非常慢
问题描述
我正在使用以下方法从 URL 下载图像:
extension UIImage {
public static func loadFrom(url: URL, completion: @escaping (_ image: UIImage?) -> ()) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
completion(UIImage(data: data))
}
} else {
DispatchQueue.main.async {
completion(nil)
}
}
}
}
}
但是现在我发现下载要在 collectionView 中使用的图像非常慢。
有没有其他方法可以更快地从图像下载?
所有图像都托管在 AWS 实例上。
解决方案
您可以尝试使用 URLSession
extension UIImageView {
func downloaded(from url: URL, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
contentMode = mode
URLSession.shared.dataTask(with: url) { data, response, error in
guard
let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
let data = data, error == nil,
let image = UIImage(data: data)
else { return }
DispatchQueue.main.async() { [weak self] in
self?.image = image
}
}.resume()
}
func downloaded(from link: String, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
guard let url = URL(string: link) else { return }
downloaded(from: url, contentMode: mode)
}
}
推荐阅读
- scala - Apache Spark 当每个键的所有记录的大小大于单个分区的大小时调用 repartition($"key") 会发生什么?
- javascript - HTML 上的照片旋转
- python - 在for循环中执行python文件
- fonts - 从包含多种字体的TTF中提取字体?
- html - 我需要使这两个按钮的颜色不同
- c++ - 如何从 cin 读取直到它为空?
- regex - 匹配不包含换行符的字符串,除非换行符前面有双反斜杠
- javascript - 我的网站已被 CORS 政策阻止
- css - 如何修改 Typora 的“github”主题 CSS 以便 `//` 也被视为注释
- kotlin - 无法使用 @WorkerInject 注入 Worker