__block 修饰局部变量
面试题举例:
typedef void (^testblock)(void);
NSInteger a =10;
__block NSInteger b=10;
testblock block1 = ^{NSLog(@"a1=%ld",(long)a);};
testblock block2 = ^{NSLog(@"a2=%ld",(long)b);};
a = 100;
b =100;
testblock block3 = ^{NSLog(@"a3=%ld",(long)a);};
testblock block4 = ^{NSLog(@"a4=%ld",(long)b);};
block1();
block2();
block3();
block4();
由于auto 类型的局部变量,可以被block捕获到,但无法修改值。 __block 正是解决这一问题。综合这个知识点。可以明确看出输出结果为
a1=10
a2=100
a3=100
a4=100

浙公网安备 33010602011771号