GCD - dispatch_async在主队列上工作,但在后台队列上崩溃

时间:2015-06-07 14:00:11

标签: ios c multithreading macos

没有太多细节,我正在用一个用C编写的相当复杂的非对称签名算法,并从用Swift编写的osx应用程序调用它。签名大约需要1秒钟,所以我试图异步调用它。

主队列上的异步工作正常,但在主队列上运行它有点失败了异步运行它的目的。

dispatch_async(dispatch_get_main_queue()) {
// run code
}

后台队列上的异步与EXC_BAD_ACCESS崩溃。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// run code
}

后台队列上的同步有效,但无论如何它都会锁定UI(主队列)。

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
// run code
}

有人可以解释为什么在主队列上异步运行代码可以正常工作,但在后台队列上运行会导致崩溃吗?有补救措施吗?如果没有,那么什么是优选的...主队列上的异步或后台队列上的同步?

1 个答案:

答案 0 :(得分:0)

如果直接从目标c代码调用c代码,则需要将c代码包装在目标c文件中,然后从.dispatch队列中调用该wrapper方法。