无法访问dispatch_async中的全局变量:"变量不可分配(缺少_block类型说明符)"

时间:2012-07-05 04:49:25

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

在我的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];
});

任何人都可以帮我找出原因吗?

1 个答案:

答案 0 :(得分:137)

修改块内的变量时必须使用__block说明符,所以你给出的代码应该是这样的:

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

Blocks捕获其体内引用的变量的状态,因此必须将捕获的变量声明为可变。考虑到你实际上是设置这个东西,可变性正是你需要的。