我的问题是在我的应用程序中我在表格视图中加载图像。当我滚动表格视图时,它非常慢并且有时会停止滚动。我在网上查看并发现使用调度会有所帮助。我尝试使用下面的代码,我的应用程序崩溃说它是零。
代码:
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())
答案 0 :(得分:0)
这种做法无法奏效。
记住具有可重用单元格的tableview如何工作。相同的单元格用于不同的行。因此,如果您异步下载图像并尝试将其存储在单元格中,则该单元格可能会用于其他行。无论如何,你在背景线程上设置图像,这将导致麻烦。
以下是您的操作:缓存图像。加载单元格后,您将查找缓存的图像。如果它在那里你设置它,如果它不在那里你设置占位符图像并开始下载。
下载完成后,您无法将图像放入单元格。而是将其添加到缓存中。然后你弄清楚哪一行应该显示图像(如果已添加或删除行),然后在主线程上重新加载该行。然后重新加载将从缓存中获取图像。