block, dispatch_queue

 block 的目的是为了支持并行编程,对于普通的 local 变量,我们就不能在 block 里面随意修改(原因很简单,block 可以被多个线程并行运行,会有问题的),而且如果你在 block 中修改普通的 local 变量,编译器也会报错。那么该如何修改外部变量呢?有两种办法,第一种是可以修改 static 全局变量;第二种是可以修改用新关键字 __block 修饰的变量。



static变量,全局变量在block块中是可以修改的,而局部变量载block中不允许更改。


int count;      // global variable
...
...
static int i = 0; //local variable
int j = 2;             //local variable
A *a = [[A alloc] initWithBlock:^(int   param1) {
            i = 4;         //correct
            count = 5;   //correct
            j = 6;       //error    局部变量不允许在块内更改
}

如果我们非要更改 j 的值,那么在j前边加上   __block关键字就可以了
__block int j = 2;
...
j = 6;   //correct    可以改变它的值
...



你可能感兴趣的:(block, dispatch_queue)