ios – UITableView在显示图像时显着滞后

ios – UITableView在显示图像时显着滞后,第1张

概述我有一个tableView,显示单元格中的图像,我正在viewDidLoad函数中获取数据 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableview.dequeueReus 我有一个tableVIEw,显示单元格中的图像,我正在vIEwDIDLoad函数中获取数据

func tableVIEw(tableVIEw: UItableVIEw,cellForRowAtIndexPath indexPath: NSIndexPath) -> UItableVIEwCell {                let cell = tablevIEw.dequeueReusableCellWithIDentifIEr("cardSelectionCell",forIndexPath: indexPath) as! MyCell                let card = fetchedResultsController.objectAtIndexPath(indexPath) as! Card                cell.name?.text = card.name                var image: NSData = card.photo as NSData                cell.logo.image = UIImage(data: image)                let date = NSDate()                let formatter = NSDateFormatter()                formatter.timeStyle = .MediumStyle                cell.policyExpiryDate.text = formatter.stringFromDate(date)                return cell         }

但问题是,当我开始滚动时,tableVIEw非常迟钝
所以我试图创建一个字典来转换vIEwDIDLoad()中的图像

var imageDictionary = [Card:UIImage]()AllCards = context.executeFetchRequest(request,error: nil) as! [Card]        for card in AllCards {            imageDictionary[card] = UIImage(data: card.photo as NSData)        }

并在tableVIEw函数中:

cell.logo.image = imageDictionary[card]

但它仍然落后

还有一个问题:如果一张卡被添加到核心数据中,我必须再次获取图像数组,所以我尝试在vIEwDIDAppear()中创建数组但是图像没有出现在第一次加载中而tableVIEw仍然是滞后.

解决方法 首先,它取决于你的图像大小:

var image: NSData = card.photo as NSDatacell.logo.image = UIImage(data: image)

这条线可能很重.您可以像这样轻松地测量它,例如:

let time1 = CACurrentMediaTime()var image: NSData = card.photo as NSDatacell.logo.image = UIImage(data: image)print(CACurrentMediaTime() - time1)

如果需要花费很多时间(例如超过8毫秒),那么应该优化它.您可以通过多种方式执行此 *** 作,例如,您可以将UIImage引用存储在某些字典或数组中,然后传递给cellForIndexPath:中的显示.
另一种方式是AsyncKit方式 – 使您的UI同步,在一个线程中加载数据并将其传递给仅在主线程上绘制.现在你所有的进程都在主线程中.

UPD:我认为在这种情况下最好的方法是将pathes存储到图像中,然后在后台运行UIImage调整大小并返回预览.你也可以为调整大小和未调整大小的UIImage制作缓存,路径或URL可以是一个键 – 所以下次只需要从缓存中取出UIImage而不是再次启动所有调整大小的过程.

还要注意这个 *** 作:

cell.logo.image = UIImage(data: image)

创建一个系统缓存并可以在内存中进行大量分配,因为垃圾收集器不会立即杀死它,就像使用UIWebVIEw一样.所以你可以在你的函数周围添加你自己的自动释放池:

autoreleasepool { () -> () in    cell.logo.image = UIImage(data: image)}
总结

以上是内存溢出为你收集整理的ios – UITableView在显示图像时显着滞后全部内容,希望文章能够帮你解决ios – UITableView在显示图像时显着滞后所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1077480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存