gpt4 book ai didi

ios - 首次加载时 NSCache 不适用于所有图像

转载 作者:搜寻专家 更新时间:2023-10-30 22:30:24 26 4
gpt4 key购买 nike

我正在使用 swift 3.0 开发一个项目,在该项目中,我通过使用 NSCache 来缓存来自服务器的响应,以便将它们填充到 UITableView 中。但是由于某种原因,当应用程序第一次加载时,我只看到很少的图像加载,但是如果我滚动并返回,我会看到所有内容(从服务器检索响应结束我也重新加载我的 tableview,但似乎并非如此)。我不确定我在这里到底遗漏了什么,下面的代码显示了我如何缓存图像。

let imageCache = NSCache<AnyObject, AnyObject>()
var imageURLString : String?

extension UIImageView {


public func imageFromServerURL(urlString: String) {
imageURLString = urlString

if let url = URL(string: urlString) {

image = nil


if let imageFromCache = imageCache.object(forKey: urlString as AnyObject) as? UIImage {

self.image = imageFromCache

return
}

URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in

if error != nil{
print(error as Any)


return
}

DispatchQueue.main.async(execute: {

if let imgaeToCache = UIImage(data: data!){

if imageURLString == urlString {
self.image = imgaeToCache
}

imageCache.setObject(imgaeToCache, forKey: urlString as AnyObject)// calls when scrolling
}
})
}) .resume()
}
}
}

最佳答案

我认为这是使用子类而不是扩展的更好方法,(从 Jageen 的评论中获得帮助,因为我们不能在扩展中包含存储的属性,所以我们使用封装的想法)

let imageCache = NSCache<AnyObject, AnyObject>()


class CustomImageView: UIImageView {

var imageUrlString: String?
func loadImageUsingUrlString(_ urlString: String) {
let url = URL(string: urlString)
imageUrlString = urlString
image = nil

if let imageFromCache = imageCache.object(forKey: urlString as AnyObject) as? UIImage {
self.image = imageFromCache
return
}

URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {
print(error!)
return

}

DispatchQueue.main.async {

let imageToCache = UIImage(data: data!)
if self.imageUrlString == urlString {
self.image = imageToCache
}
imageCache.setObject(imageToCache!, forKey: urlString as AnyObject)

}

}.resume()

}
}

-现在使用这个子类作为您在屏幕上显示的 imageViews 的类型

关于ios - 首次加载时 NSCache 不适用于所有图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com