我被困在如何解决问题上。我目前有一个iPhone应用程序,实际上是Instagram,但只是水平和分页,用户看到朋友的照片。
现在我创建了一个从firebase抓取图像并将它们放入数组的函数。现在,这可以很好地执行共享URLSession。我注意到我的应用程序内存使用率很高,所以我添加了一个URLcache,并设置了它可以获得多大的限制,实际上我认为它有点高。但我仍然获得高内存(171mb) - 并且这只是加载4个图像使用,这使得我似乎没有正确缓存数据。
我仍在学习如何使用URLSessions以及缓存,因此如果我设置错误,这也可能会导致问题。在线人士说使用SDWebImage,但实际上,用户不会向下滚动或者能够快速向下滚动,因为首先启用了分页,并且它也是水平的。以下是我的一些代码,请告诉我您认为我应该做些什么。
urlcache in
viewDidLoad() { //probably too high..
let memoryCapacity = 500 * 1024 * 1024
let diskCapacity = 500 * 1024 * 1024
let urlCache = URLCache(memoryCapacity: memoryCapacity, diskCapacity: diskCapacity, diskPath: "myDiskPath")
URLCache.shared = urlCache
}
// cellforrow
if posts.count != nil {
let pozt = posts[indexPath.row].pathToImage
let url = URL(string: pozt!)
URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
if error != nil {
print(error?.localizedDescription as Any)
return
}
DispatchQueue.main.async {
cell.myImage.image = UIImage(data: data!)
self.loader.stopAnimating()
}
}).resume()
}
cell.myImage.image = UIImage(named: imaqes[0])
return cell
}
答案 0 :(得分:0)
我认为几乎所有程序员都使用库来缓存图像。 我使用KingFisher而不是SDWebImage。它重量轻,使用简单。
安装:
Podfile:
pod 'Kingfisher'
在终端:
pod install
在swift文件中:
import Kingfisher
在你的情况下,请使用下一个方法:
// cellforrow
if posts.count != nil {
let pozt = posts[indexPath.row].pathToImage
let url = URL(string: pozt!)
DispatchQueue.main.async {
cell.myImage.kf.setImage(with: url!) //Using kf for caching images
}
}
return cell
也许您应该使用.kf.setImage
和comletion处理程序来删除加载程序。你应该明白这个想法。
希望有所帮助