如果将此例题中的multiplier局部变量,修饰成static?

来源:7-3 __block修饰符相关面试问题

慕斯卡622825

2019-03-05

原题:
{
__block int mutliplier = 6;
int(^Block)(int) = ^int(int num) {
return num * mutliplier;
};
mutliplier = 4;
NSLog(@“result is %d”, Block(2));
}

修改为:
{
static int mutliplier = 6;
int(^Block)(int) = ^int(int num) {
return num * mutliplier;
};
mutliplier = 4;
NSLog(@“result is %d”, Block(2));
}

我在Xcode中,实际运行结果相同。
是否可以达到同样的效果,请老师帮忙解答一下?

写回答

2回答

JerseyCafe

2019-03-14

是正确的,  因为 Block 会截获 局部静态变量的指针 而非其值. 

1
0

摩羯大灰狼

2019-03-05

static 静态局部变量 block 截获指针 

__block 修饰后 变量变为 对象 

0
1
慕斯卡622825
对 这个知识点我也理解了。
2019-03-05
共1条回复

资深大牛带你深度剖析ios高级面试

从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系

1749 学习 · 600 问题

查看课程