block代码块中改变外部变量的值

block代码块中若想改变外部变量的值需要在外部变量钱面加__block.

需注意如果只是在块内修改了变量,外部没有调用这个block,此时在外部打印这个变量时还是其原来的值。

- (void)block {

__block int x  = 5;// 在变量前面加了__block

int (^block2)(int) = ^(int y){

x=6;//这里允许对该变量进项修改 此时 X 的值为6

NSLog(@"%d",x);

int z = x + y;

return z;

};

block2(4);//如果不调用 block 下边打印的 X 的值还是5(调用此方法时 将这行代码注释掉,加上分别运行一次就看出来了)

//block代码块中可以对__block修饰的变量修改,但是修改的值仅限于 block 代码块内部,因为在给block赋值的时候,已经对代码块里的变量做了值的拷贝

NSLog(@"%d,%d",x,block2(4));

}

PS:不明白其中的内部原理,如果哪位大神看到的话望补充告知!!谢谢!!!

你可能感兴趣的:(block代码块中改变外部变量的值)