【发布时间】:2021-07-08 18:27:23
【问题描述】:
所以我们有这个代码 它发出从 API 获取数据的请求,我了解到更新 UI 应该只在主线程上但是如果我删除 DispatchQueue.main.async {} 没有任何反应,没有错误或没有警告 所以我想知道我应该保留它还是不保留它
func loadUsers() {
server.getUserInfo()
server.completionHandler {[weak self] (users,status,message) in
if status {
guard self != nil else {return}
guard users != nil else {
return
}
self?.userViewModel.setUsers(users: users!)
DispatchQueue.main.async {
self?.tableView.reloadData()
}
}
}
}
}
【问题讨论】:
-
如果没有错误(现在,那行是一个紫色的ruban,可能是控制台错误,或者如果设置启用了断点),这意味着
ompletionHandler已被调用主线程。注意,有时闭包可以在当前线程中调用,有时不能。 -
@Larme 是的,我打印出了当前线程,它说的是 main,但它并不总是这样吗?
-
不保证。将触发它的调用可以在任何线程中。这取决于它是如何完成的。
completionHandler的文档是什么,是你的代码吗?如果是这样,它是哪一个?它的文档保证有一个特殊的线程? -
@Larme 我正在使用 alamofire 请求
标签: swift request queue completionhandler