作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在不涉及太多细节的情况下,我正在尝试用 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/
我是一名优秀的程序员,十分优秀!