为什么dispatch_queue_create在Swift中给出EXC_BAD_ACCESS错误
Why does dispatch_queue_create give an EXC_BAD_ACCESS error in Swift?
我正在将一些使用Grand Central Dispatch的C++代码移植到Swift,我发现Dispatch_queue_create似乎根本不起作用,这是一个奇怪的错误。
例如,在我的C++基类头中,我会声明
dispatch_queue_t m_WorkQ;
在初始化器中,放入
m_ResultQ = dispatch_queue_create("com.myapp.mHitsUpdateQueue", 0);
一切都很美好。
我在Swift中尝试过,在我的课堂上,在课堂级别声明了这一点:
var resultQueue: dispatch_queue_t
在初始化程序中,我有(除其他外)行
resultQueue = dispatch_queue_create("com.myapp.mHitsUpdateQueue", 0)
它编译和启动都很好,但在上面的行上给我一个EXC_BAD_ACCESS(代码=1,地址=0x37)的即时运行时错误
为了确定这是否是我所做的其他事情,我创建了一个仅由以下代码组成的命令行工具应用程序:
import Foundation
var thisQueue = dispatch_queue_create("com.myApp.mHitsUpdateQueue", 0)
println(thisQueue.description)
果不其然,我在"thisQueue"分配行中得到了上述错误。因此,我确信Swift和GCD队列创建有一些非常明显的地方是我所缺少的。
有人能帮我吗?
dispatch_queue_create()
的第二个参数具有类型dispatch_queue_attr_t
,声明为
typealias dispatch_queue_attr_t = NSObject
您必须为串行队列传递DISPATCH_QUEUE_SERIAL
或nil
(对于并发队列,则为DISPATCH_QUEUE_CONCURRENT
):
var thisQueue = dispatch_queue_create("com.myApp.mHitsUpdateQueue", DISPATCH_QUEUE_SERIAL)
在C(++)中,可以传递0
而不是NULL
指针。
然而,Swift编译器将整数0
封装到NSNumber
对象中以便将其传递给期望CCD_ 10的函数参数这会导致运行时异常,因为NSNumber
不是有效的属性。因此通过0
或nil
Swift的差异显著。
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"
- OpenCV SVM 在火车上抛出异常,"Bad argument (There is only a single class)"
- 成员函数 bad() 的 std::ftsream 用于检查
- 使用 boost::asio 和 boost::thread 时"Bad file descriptor"
- OpenCV C++神经网络 predict() 函数抛出"Bad argument"错误