嗨我跟随udemy上的ios 10和swift 3课程并且教师的代码使我的图像在表格视图单元格中非常缓慢地下载(需要15个借调来加载5个图像),使用以下代码:
let url = URL(string : partyRock.ImageUrl)!
DispatchQueue.global().async {
do{
let data = try Data(contentsOf: url)
DispatchQueue.global().sync{
self.videoPreviewImage.image = UIImage(data: data)
}
} catch {
//handle catch error
}
使用此代码可以非常快速地下载(事情是我不理解DispatchQueue.main.sync和DispatchQueue.global()之间的区别.sync
let url = URL(string : partyRock.ImageUrl)!
DispatchQueue.global().async {
do{
let data = try Data(contentsOf: url)
DispatchQueue.main.sync{
self.videoPreviewImage.image = UIImage(data: data)
}
} catch {
//handle catch error
}
答案 0 :(得分:0)
DispatchQueue.global().async
表示它以异步方式在后台运行。
DispatchQueue.main.sync
表示它同步在主线程中运行。
更新UI必须始终位于主线程上。而其他人(下载/上传数据到服务器等)可以发送到后台。
答案 1 :(得分:0)
DispatchQueue.main.sync是主队列:在主线程上运行,是一个串行队列。 这是在完成并发队列上的任务中完成工作后更新UI的常见选择。
DispatchQueue.global()。async是全局队列:整个系统共享的并发队列。有四个这样的队列具有不同的优先级:高,默认,低和背景。后台优先级队列受I / O限制。 这是在后台执行非UI工作的常见选择