一、局部变量和Block
ERROR
int number=100;
void (^TestBlock)(int)=^(int x){
number=number+x;
};
// 调用
TestBlock(100);
正确姿势
__block int number=100;
void (^TestBlock)(int)=^(int x){
number=number+x;
NSLog(@"TMD 加了一个 __block 修饰下就好了:%d",number);
};
// 调用
TestBlock(100);
二、全局变量与Block
int value=100;
-(void)testMethod{
void (^TestBlock)(int)=^(int x){
value=value+100;
NSLog(@"看看是不是喽%d",value+x);
};
TestBlock(100);
}
三、static静态变量与Block
static int number=100;
int (^TestBlock)(int)=^(int x){
return number+x;
};
NSLog(@"TMD 用static修饰 使用局部变量的结果:%d",TestBlock(100));
number=50; //change the value of number.
NSLog(@"在外面改变number的值,再次调用block的结果:%d",TestBlock(100));
// 运行结果
[995:51910] TMD用static修饰使用局部变量的结果:200
[995:51910] 在外面改变number的值,再次调用block的结果:150
static int number=100;
void (^TestBlock)(int)=^(int x){
number=10000;//change the value of static number without __block.
NSLog(@"在block块里面改变static局部变量number的值:%d",number+x);
};
// 调用
TestBlock(86);
// 运行结果
[995:51910]在block块里面改变static局部变量number的值:10086