把变量放入堆,指向同一个地址
typedef void(^Blocky)(void);
Blocky b;
int i = 0;
b = ^{
NSLog(@"i %d", i);
};
i ++;
b(); //0
typedef void(^Blocky)(void);
Blocky b;
__block int i = 0;
b = ^{
NSLog(@"i %d", i);
};
i ++;
b(); //1
可修改
id x;
__block id y;
__block BOOL isRuned = NO;
void (^block)(void) =^{
x = [NSString string]; // error
y = [NSString string]; // works
isRuned = YES; //works
};
递归调用block
typedef int(^Blocky)(int i);
__block Blocky b = ^(int i){
if (i == 0 || i == 1) return i;
return b(i-1) + b(i-2);
};
NSLog(@"%d", b(10));