之前对GCD的理解很浅,就是那种看了一会能勉强理解,可是过一段时间又给忘记了,又得回头来看。这次下定决心一定要把GCD给吃透了。网上也有很多不错关于GCD的文章帮助了我的理解。
很多情况下,我们使用GCD的情况基本是以下几种:
异步获取网络数据,在主线程中刷新UI
override func viewDidLoad() {
super.viewDidLoad()
loadData { (result) in
// 获取到数据赋值
self.dataArr = result
//刷新tableView列表
self.tableView.reloadData()
}
setupUI()
}
func loadData(completionescaping (_ result[String]))->()){
DispatchQueue.global().async {
print("模拟网络延迟")
Thread.sleep(forTimeInterval: 3.0)
let arr = ["😝","🤣","🙄","🌹","💰","😪","😴"]
DispatchQueue.main.async {
print("回到主线程,更新UI")
completion(arr)
}
}
}
定时操作
func timer() {
print("开始")
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0) {
print("结束")
}
}
设计单例
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{ |