美文网首页
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