美文网首页
ios基础之一天一道笔试题(3)

ios基础之一天一道笔试题(3)

作者: 66be37b2096c | 来源:发表于2019-01-28 10:23 被阅读3次

    请写出下列程序的执行结果:

    int a = 10;
    void (^block)() = ^{
        NSLog(@"a is %d", a);
    };
    a = 20;
    block(); 
    
    __block int a = 10;
    void (^block)() = ^{
        NSLog(@"a is %d", a);
    };
    a = 20;
    block(); 
    

    运行结果:10, 20
    解析:本题主要考察队block底层实现的理解,通俗来说,当变量是局部变量时,block可以自动捕获局部变量的值,block的内部实现是生成了新的变量a,将原变量a的值赋给新的变量a,即指向原变量a指向的地址,所以当原变量a的值发生改变时,block内部新生成的变量a的值不会发生改变,而当变量被__block修饰时,block内部新生成的变量a的地址指向原变量a的地址,所以当a的值发生改变时,block内部新生成的a的值也会随之改变。具体可以参考这篇文章:传送门

    相关文章

      网友评论

          本文标题:ios基础之一天一道笔试题(3)

          本文链接:https://www.haomeiwen.com/subject/jmnojqtx.html