为什么在闭包完成相同的函数之前执行延迟块

时间:2015-10-04 22:14:46

标签: ios swift2 clgeocoder

我在Swift 2.0中编写了以下函数来添加一个使用ax.add_collection(patch_collection) plt.colorbar(patch_collection) plt.show() 来解析给定坐标的位置名称的地图注释。我使用CLGeocoder()块来获取已解析的位置名称,但是,在闭包完成之前,延迟块似乎已完成。为什么呢?

以下是我的代码:

defer

2 个答案:

答案 0 :(得分:6)

你误解了延迟块的作用。

这是退出当前范围时执行的代码块。

当您使用完成块执行异步方法时,它会立即返回并继续执行到下一行。被调用的方法将完成块并保存以供日后使用。

然后您的方法完成并执行传递出方法的范围。延迟块被执行。稍后,异步方法完成它的后台工作并调用传递给它的完成处理程序。使用异步方法,在调用方法返回后始终发生。

@fqdn有正确的想法。将清理代码放在完成块中。这就是它所属的地方。

答案 1 :(得分:5)

reverseGeocodeLocation(_:completionHandler:)以异步方式执行,在调用defer参数时,在关闭传递之前,completionHandler块中的代码正在执行是有意义的

是否有理由不能将defer块中的代码移入完成处理程序?