我正在从url获取图像并将其显示在tableview中,这是成功的,但是当我自动滚动它并反复更改时,但是当我在这一点上暂停几秒钟(大约10秒或更长时间)之后,就会加载正确的图像。
func load_image(urlString:String)
{
let imgURL: NSURL = NSURL(string: urlString)!
let request: NSURLRequest = NSURLRequest(URL: imgURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if (error == nil && data != nil)
{
func display_image()
{
cell.pic.image = UIImage(data: data!)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
task.resume()
}
load_image(urls[indexPath.row])
最佳答案
首先,我想,你为什么要在cellForRowAtIndexPath
中加载图像?
您可以将其加载到viewDidLoad
并存储在某个数组中。但如果你需要像现在这样做。。。
为了获得更好的性能,可以使用NSCache
来防止每次tableview显示单元格时加载图像。试试这样的:
let imageCache = NSCache()
func load_image(urlString:String)
{
if let imageFromCache = imageCache.objectForKey(urlString) as? UIImage {
cell.pic.image = imageFromCache
return
}
let imgURL: NSURL = NSURL(string: urlString)!
let request: NSURLRequest = NSURLRequest(URL: imgURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request){
(data, response, error) -> Void in
if (error == nil && data != nil)
{
func display_image()
{
let imageToCache = UIImage(data: data!)
cell.pic.image = UIImage(data: data!)
imageCache.setObject(imageToCache!, forKey: urlString)
}
dispatch_async(dispatch_get_main_queue(), display_image)
}
}
task.resume()
}
有关NSCache的更多信息,您可以查看documentation。
关于ios - 图像在iOS中滚动滚动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38682052/