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

标签 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
}

谁能解释为什么在主队列上异步运行代码工作正常,但在后台队列上运行时会导致崩溃?有补救办法吗?如果不是,那么更好的是......在主队列上异步还是在后台队列上同步?

最佳答案

如果您直接从 Objective C 代码调用 C 代码,那么您需要将 C 代码包装在 Objective C 文件中,并从.dispatch 队列调用该包装器方法。

关于ios - GCD -dispatch_async 在主队列上工作,但在后台队列上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694379/

相关文章:

android - 从网站中的链接打开 Cordova 移动应用程序

IOS 7判断 "Show in Notification Center"是否被禁用

c++ - C/C++ : Calling function with no arguments with function which returns nothing

java - 如何在Java中正确创建和实现ThreadPool类型的类

c - 关于malloc和free中的线程安全

java - 性能Image.SCALE_DEFAULT与Image.SCALE_SMOOTH

android - 如何在 corona sdk 中的单词周围添加一个矩形?

objective-c - 背景 UIImage 成为 Zombie 委托(delegate)

c - 为什么此 ioctl 的 access_ok 失败

c - 在 udp 服务器中接收最新数据包 - C