直到上周我一直在使用Nuke,但我转而使用SDWebImage,因为它比Nuke流行几倍,而且看起来更内置。
然而,在切换到SDWebImage之后,我注意到构建时间要长得多。我在这里并不是在征求意见。就有形指标而言,Nuke是不是比SDWebImage更有性能、更轻便?
虽然我对SDWebImage的内部和外部并不了解,但SDWebImage似乎有很多功能,但缺少一个关键的功能:我还没有找到如何在加载镜像时设置网络故障的故障镜像。虽然,这在Nuke中是非常容易做到的。
let options = ImageLoadingOptions(
failureImage: #imageLiteral(resourceName: "image-not-found")
)
Nuke.loadImage(with: URL(string: products[indexPath.row].imageLink)!, options: options, into: cell.productImage)发布于 2020-07-15 04:53:40
不需要/推荐使用外部框架,只用于从URL加载图像。
如果你使用一个外部框架,你正在向你的项目添加不必要的代码,因为没有框架只添加一个函数来加载图像,这可能是因为你在该框架中添加了更多不必要的东西。
我建议你自己去实现它!它将比添加一个外部框架更高效、更容易。
这是在没有外部框架的情况下加载图像的代码:
import UIKit
typealias GMImageServiceSuccess = (UIImage) -> Void
typealias GMImageServiceFail = (Error) -> Void
class GMImageService {
// MARK: - Class vars.
private static let imageServiceCache = NSCache<NSString, UIImage>()
// MARK: - Vars.
private var currentDataTask: URLSessionDataTask?
// MARK: - Fetch images functions.
func gmImageFromURL(_ urlString: String, sucess: GMImageServiceSuccess?, fail: GMImageServiceFail?) {
if let imageFromCache = GMImageService.imageServiceCache.object(forKey: urlString as NSString) {
sucess?(imageFromCache)
return
}
guard let imageURL = URL(string: urlString) else {
// ERROR.
return
}
URLSession.shared.dataTask(with: imageURL) { data, response, error in
guard let imageData = data else {
// ERROR.
return
}
if let imageToCache = UIImage(data: imageData) {
DispatchQueue.main.async {
GMImageService.imageServiceCache.setObject(imageToCache, forKey: urlString as NSString)
sucess?(imageToCache)
}
} else {
// ERROR.
}
}.resume()
}
// MARK: - Cancel images functions.
func mpImageCancelCurrent() {
if let currentTask = self.currentDataTask {
currentTask.cancel()
}
}
}如果您需要实现图像缓存,请让我知道,这在swift中很容易实现!
https://stackoverflow.com/questions/62903295
复制相似问题