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;