首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >API响应闭包中的iOS Swift 3 DispatchQueue.main.async()

API响应闭包中的iOS Swift 3 DispatchQueue.main.async()
EN

Stack Overflow用户
提问于 2017-07-24 04:34:44
回答 2查看 624关注 0票数 0

因此,我从一个API服务中解析一个json响应,并在响应解析闭包中更新UI,这应该是异步发生的。

我注意到--尽管API的响应非常快,但我可以从控制台日志中看出-- UI不会立即更新。需要几秒钟才能更新。

所以我搜索了一下,发现将UI更新代码放在DispatchQueue.main.async()中可以修复它。

为什么是这种情况?闭包不应该是异步的,并处理好所有这些吗?我是不是误会了什么?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-24 04:40:53

是的,我的朋友,你在这里漏掉了什么。闭包本质上不应该是异步的。甚至您定义的正常函数都是闭包。闭包不是解决所有问题的魔杖。它只是一个可以传递的语句块。

正如您说的那样,响应来得很快,但UI不会自动更新,这可能需要花时间进行解析。确保您没有在主队列上执行解析部分,只有UI更新应该在主队列上。

票数 1
EN

Stack Overflow用户

发布于 2017-07-24 04:51:53

您正在使用URLSessionsdataTask(with:completionHandler:) api吗?如果是这样的话,则从后台队列调用completionHandler。这就是为什么更新UI需要一些时间(这里要小心,您也可以得到随机崩溃)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45280792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档