1、__block关键字的使用
在Block的代码块里,是不能修改在外面定义的变量,并且在给block赋值的时候,已经对代码块里的变量做了值的拷贝(只读不可修改)。
示例代码:
int x = 5;
int (^block4)(int) = ^(int y) {
int z = x + y;
return z;
};
NSLog(@"%d,%d",x +=5,block4(5));
打印的值是10,10;
分析:变量x在Block外定义的,在Block代码块编译的时候,取的x的值为之前的5(不可修改)。因此即使执行x += 5的使x的值变为10,但Block代码块里的x依然是5,所以block(5)的值为5+5=10。
在变量前添加__block关键字进行修饰后,此变量在Block代码块里的就是可更改的(可读可写),执行代码时取变量最新的值。
示例代码:
__block int x = 5;
int (^block4)(int) = ^(int y) {
int z = x + y;
return z;
};
NSLog(@"%d,%d",x +=5,block4(5));
打印的值是10,15;
浙公网安备 33010602011771号