ios - GCD队列不兼容类型错误

标签 ios objective-c objective-c-blocks grand-central-dispatch

好的,这是我的第一篇文章,在Objective-C上还是很新,但是在这里:

我当前正在创建一个项目,该项目将创建第二个队列以生成一堆NSTimers并将其关闭。由于我不想停止主要队列,因此我认为大中央车站是最佳路线。

目前,我有一个执行以下操作的UIButton:

- (IBAction)runTest:(id)sender {
    if (!timerQueue) {        
        timerQueue = dispatch_queue_create("com.myApp.timerQueue", DISPATCH_QUEUE_SERIAL);
}

dispatch_async(timerQueue, ^{[self initiateTest];});

然后...
- (void) initiateTest {

// code to generate timers and execute

}

与所有发生这种情况的viewController关联的头文件如下所示:
@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
    dispatch_block_t timerQueue;
}

...

- (IBAction)runTest:(id)sender;
- (void) initiateTest;

问题似乎与生产线有关
timerQueue = dispatch_queue_create("com.myApp.timerQueue", DISPATCH_QUEUE_SERIAL);

这就产生了一个相当冗长的语义问题,内容为:

从不兼容类型'dispatch_queue_t'(又称为'NSObject *')分配给'__strong dispatch_block_t'(aka'void(^ __ strong)(void)')

知道为什么会产生此错误吗?在文档中似乎这是正确的解决方法。

谢谢;让我知道代码中是否还有其他有用的信息!

编辑:所以这是一个相当愚蠢的错误,但对于其他人:确保类型匹配(块/ =队列!)。与viewController关联的.h文件应如下所示:
@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
    dispatch_queue_t timerQueue; // This is where the problem was.
 }

...

- (IBAction)runTest:(id)sender;
- (void) initiateTest;

最佳答案

您已将timerQueue声明为dispatch_block_t的实例,当它应为dispatch_queue_t时,它是dispatch_queue_create()的返回类型

关于ios - GCD队列不兼容类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21320708/

相关文章:

objective-c - Obj-C Block 可以自行执行吗?

android - 具有离线访问和本地安全性和跨平台的类似 Google Drive/Dropbox 的解决方案

ios - 如何解决malloc_error_break?

objective-c - AFNetworking + RNCryptor - 在 JSON 解析之前解密数据

ios - 只为 iPad 设置横向方向而不是 iPhone

ios - Instruments 报告我正在泄漏 NSMallocBlocks(又名 block 对象),但我真的是这样吗?

ios - 循环打开 UIDocument

objective-c - 在来自 Delphi XE2 Datasnap Server 的 Xcode 中处理 TDataSet 结果

ios - 在第二个 View Controller 上展开 Segue 错误

ios - 围绕 anchor 旋转 UIImageView