GCD队列不兼容的类型错误

时间:2014-01-23 22:31:58

标签: 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'(又名'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;

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

阅读错误。查看文档以获取dispatch_queue_create的返回值。最后看看你如何声明timerQueue。这是错误的类型。

你需要:

@interface ViewController : UIViewController <SomeOtherMgrDelegate> {
    dispatch_queue_t timerQueue;
}