2

我正在使用此处看到的代码定期执行代码:

#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 = ^
4

1 回答 1

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”调用中使用它,但尚未完全设置。

于 2013-08-07T06:10:10.437 回答