今天继续讲Objective-C的Block,上一节讲过,在作用域内,一般是一个方法体内,Block不可以修改外部的变量的值。这一节我们讲如何实现可以在Block内修改外部的变量,即使用__block修饰符修饰该变量。
下面是android developer官方文档的讲解:
Use __block Variables to Share Storage
If you need to be able to change the value of a captured variable from within a block, you can use the __block storage type modifier on the original variable declaration. This means that the variable lives in storage that is shared between the lexical scope of the original variable and any blocks declared within that scope.
As an example, you might rewrite the previous example like this:
__block int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"Integer is: %i", anInteger);
};
anInteger = 84;
testBlock();
Because anInteger is declared as a __block variable, its storage is shared with the block declaration. This means that the log output would now show:
Integer is: 84
It also means that the block can modify the original value, like this:
__block int anInteger = 42;
void (^testBlock)(void) = ^{
NSLog(@"Integer is: %i", anInteger);
anInteger = 100;
};
testBlock();
NSLog(@"Value of original variable is now: %i", anInteger);
This time, the output would show:
Integer is: 42
Value of original variable is now: 100