当块捕获时,块指针变量'block'未初始化

时间:2013-08-07 05:41:24

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

我正在使用here代码定期执行代码:

#define DELAY_IN_MS 1000
__block dispatch_time_t next = dispatch_time(DISPATCH_TIME_NOW, 0);
void (^block)(void) = ^  // Get warning here!
{
    next = dispatch_time(next, DELAY_IN_MS * 1000000L);

    // Do my periodic thing ...

    dispatch_after(next, dispatch_get_main_queue(), block);
}

这会产生警告(见标题)。关于这个警告我有两个问题:

  • 这是什么意思?
  • 为什么写作时警告会消失:void (^block)(void); block = ^

1 个答案:

答案 0 :(得分:11)

要宣布您的阻止,您将使用

void (^block)(void); 

然后用

初始化它
block =^  // Get warning here!
{
    next = dispatch_time(next, DELAY_IN_MS * 1000000L);

    // Do my periodic thing ...

    dispatch_after(next, dispatch_get_main_queue(), block);
}

这就是为什么插入分号的原因。

为什么它在没有分号的情况下给出错误:您在其自己的声明/赋值中引用了块。您正在“dispatch_after”调用中使用它,但尚未完全设置。