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:不明白其中的内部原理,如果哪位大神看到的话望补充告知!!谢谢!!!