iOS tableView滑动卡顿的问题之一

来源:互联网 发布:千锋php视频教程 编辑:程序博客网 时间:2024/05/16 15:15

修改前计算cell高度的代码

let data = NSData(contentsOf: URL(string: self.model?.details?[indexPath.row-2] ?? "")!)                guard data != nil else {                    return 0                }                let image = UIImage.init(data: data! as Data)                print(image?.size ?? 0)                cell.goodsImage.backgroundColor = UIColor.red                return (image?.size.height)! * kWidth/(image?.size.width)!

其中NSData(contentsOf: URL(string)方法是在主线程中执行,转为data比较耗时,导致tableView滑动的卡顿。所以在检查不是图片加载的问题后,对cell高度的返回进行了优化

//找出缓存中的图片并获得尺寸                let imageCache = SDImageCache.shared()                var image = UIImage()                                //从缓存或磁盘中能找到                if imageCache?.imageFromMemoryCache(forKey: self.model?.details?[indexPath.row-2]) != nil || imageCache?.imageFromDiskCache(forKey: self.model?.details?[indexPath.row-2]) != nil {                    image = (imageCache?.imageFromMemoryCache(forKey: self.model?.details?[indexPath.row-2]))!                    return (image.size.height) * kWidth/(image.size.width)                } else {                //本地找不到                    let data = NSData(contentsOf: URL(string: self.model?.details?[indexPath.row-2] ?? "")!)                    guard data != nil else {                        return 0                    }                    let image = UIImage.init(data: data! as Data)                    return (image?.size.height)! * kWidth/(image?.size.width)!                }

利用SDWebImage框架的强大缓存机制,先在缓存中查找要加载的图片,有的话直接拿其尺寸来用,没有找到的图片就通过model数据转化data进而得到图片信息。

我想 找不到的情况应该不会存在吧,毕竟tableView的代理方法先执行的cell加载,包括了图片加载,执行cell高度代理时,对应图片的缓存都已经存在了。

原创粉丝点击