block内存操作之fowarding
来源:7-4 Block内存管理相关面试问题

鹤笑天
2020-03-31
1.这题并没考察到是否对fowarding的理解啊?
老师,这道题,无论是这个block copy了或者是没copy,答案都是24啊
用copy修饰了,修改的堆上的,4* 6 24
没用copy修饰, 修改栈上的,也是 4* 6 24
怎么都不可能是4*10啊。
2.还有一个问题?
forwarding的意义是,copy修饰后,栈block或是堆block上访问都可以访问同一个__block变量!
但是copy修饰后,访问的不都是堆上的block么?
您例子中的那个不也是访问的堆上的block么?
怎么能再访问到栈上的block呢?
3回答
-
慕工程748436
2023-06-14
我的理解是,这个示例是要显示copy后两个block对象的结果相同,这表明两个block对象的捕获的对象的值(forwarding指向)是相同的。
如果我理解正确,那可能示例代码写成这样,表意会更清楚一点__block int var = 10; int (^ testBlock) (int num) = ^int(int num){ return num*var; }; var = 6;
NSLog(@"block result is %d ", testBlock(5)); // 30说明var变成对象
var = 4;
_blk = testBlock; //copy操作后两个block的结果相同,说明两个block对象操作的var对象的forwarding相同
NSLog(@"block result is %d ", testBlock(5));
NSLog(@"block result is %d ", _blk(5));
00 -
于海
2020-04-03
可以再重看一遍这个小节。你给到的截图中示例代码是在说明forwarding 的理解的。 __block修饰的multiplier变量,你把那个__block修饰符去掉就会得到40的答案。可以亲自试下哦。
012020-04-03 -
于海
2020-04-03
可以再重看一遍这个小节。你给到的截图中示例代码是在说明forwarding 的理解的。 __block修饰的multiplier变量,你把那个__block修饰符去掉就会得到40的答案。可以亲自试下哦。
00
相似问题
回答 1
回答 2