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);
}

これにより、警告が発生します (タイトルを参照)。この警告について 2 つの質問があります。

  • どういう意味ですか?
  • と書くと警告が消えてしまうのはなぜ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 に答える