Tableview滚动加载图像太慢

时间:2015-05-31 21:41:29

标签: ios swift

我的问题是在我的应用程序中我在表格视图中加载图像。当我滚动表格视图时,它非常慢并且有时会停止滚动。我在网上查看并发现使用调度会有所帮助。我尝试使用下面的代码,我的应用程序崩溃说它是零。

代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {

                let parseImage: PFFile = objectSong.valueForKey("picture") as PFFile
                var pic: UIImage = UIImage(data: parseImage.getData())!

                    dispatch_async(dispatch_get_main_queue()) {
                        cell.imageView.image = pic   <-- crash happens here
                    }
                }
            }

以前用于加载表格视图单元格的代码:

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TableViewCell
        let objectSong: PFObject = object as PFObject

        cell.songImage.image = UIImage(data: parseImage.getData())

1 个答案:

答案 0 :(得分:0)

这种做法无法奏效。

记住具有可重用单元格的tableview如何工作。相同的单元格用于不同的行。因此,如果您异步下载图像并尝试将其存储在单元格中,则该单元格可能会用于其他行。无论如何,你在背景线程上设置图像,这将导致麻烦。

以下是您的操作:缓存图像。加载单元格后,您将查找缓存的图像。如果它在那里你设置它,如果它不在那里你设置占位符图像并开始下载。

下载完成后,您无法将图像放入单元格。而是将其添加到缓存中。然后你弄清楚哪一行应该显示图像(如果已添加或删除行),然后在主线程上重新加载该行。然后重新加载将从缓存中获取图像。