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 回答