采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
__block int var = 10; int (^ aa) (int num) = ^int(int num){ return num*var; }; var = 6; int x = aa(5); NSLog(@"result = %d", x);
问一下这什么这样在栈上定义的block 执行的值也是30而不是50?
定义阶段并没有发生变量截获。可以按照课程提供的clang方式编译下看看这段代码的编译结果
定义阶段没有发生为难量截获 那这样为什么结果是 50 不是30? int var = 10; int (^ aa) (int num) = ^int(int num){ return num*var; }; var = 6; int x = aa(5); NSLog(@"result = %d", x);
这样的话,在编译的阶段 截获了 var的值 在blcok运算的的是10, 你最开始的问题用__block修饰后 变量在编译过程中编程了 对象带有forwarding 指针 后面修改值 指针重新指向了新值 所以 第一次结果30 第二次结果50
登录后可查看更多问答,登录/注册
从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系
1.3k 11
1.8k 9
1.2k 9
999 8
950 8