49

私のdispach_asyncコードblockでは、にアクセスできませんglobal variables。このエラーが発生していますVariable is not Assignable (missing _block type specifier)

NSString *textString;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
   (unsigned long)NULL), ^(void) {
        textString = [self getTextString];
});

誰でも理由を見つけるのを手伝ってもらえますか?

4

1 に答える 1

139

ブロック内の変数を変更するときは __block 指定子を使用する必要があるため、指定したコードは次のようになります。

 __block NSString *textString;
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                                 (unsigned long)NULL), ^(void) {
      textString = [self getTextString];
});

ブロックは、その本体内で参照される変数の状態をキャプチャするため、キャプチャされた変数は変更可能であると宣言する必要があります。そして、本質的にこのことを設定していることを考えると、可変性はまさにあなたが必要とするものです。

于 2012-07-05T04:51:50.723 に答える