因此,我从一个API服务中解析一个json响应,并在响应解析闭包中更新UI,这应该是异步发生的。
我注意到--尽管API的响应非常快,但我可以从控制台日志中看出-- UI不会立即更新。需要几秒钟才能更新。
所以我搜索了一下,发现将UI更新代码放在DispatchQueue.main.async()
中可以修复它。
为什么是这种情况?闭包不应该是异步的,并处理好所有这些吗?我是不是误会了什么?谢谢
发布于 2017-07-24 04:40:53
是的,我的朋友,你在这里漏掉了什么。闭包本质上不应该是异步的。甚至您定义的正常函数都是闭包。闭包不是解决所有问题的魔杖。它只是一个可以传递的语句块。
正如您说的那样,响应来得很快,但UI不会自动更新,这可能需要花时间进行解析。确保您没有在主队列上执行解析部分,只有UI更新应该在主队列上。
发布于 2017-07-24 04:51:53
您正在使用URLSessions
的dataTask(with:completionHandler:)
api吗?如果是这样的话,则从后台队列调用completionHandler
。这就是为什么更新UI需要一些时间(这里要小心,您也可以得到随机崩溃)。
https://stackoverflow.com/questions/45280792
复制相似问题