__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
posted @ 2020-07-20 11:25  Love margin  阅读(243)  评论(0)    收藏  举报