我已经阅读了关于Grand Central Dispatch的几个教程,但我不明白一件事:
为什么dispatch_sync比不使用线程更快?如果我有线程1等待线程2完成,那么即使使用第二个线程也是如此?
答案 0 :(得分:3)
让我们说你是在后台线程。并且让我们说你需要在主线程上做一些事情来与界面交谈,但你不能允许后台线程完成,因为主线程需要来自后台线程的一些资源,比如文件。然后使用sync
实际上很好。当你进入主线程时它会阻塞后台线程,而你实际上想要来做这件事。
这是我书中的一个例子:
我们说main
是false
,所以我们在后台线程上进入委托方法。在didFinishDownloadingToURL
结束时,已下载文件并等待接收;我们在主线程上调用调用者来告诉他们。我们必须使用sync
,因为如果我们不这样做,我们的后台线程将会完成,下载的文件将在调用者有机会获取之前销毁。