美文网首页面试宝点面试必读
iOS __block修饰变量时的底层原理

iOS __block修饰变量时的底层原理

作者: 芒果儿1 | 来源:发表于2019-11-30 13:41 被阅读0次

总结:为什么Block内部不能改变自动变量(就是局部变量)的值

自动变量是以值传递方式传递到Block的构造函数里面去的。Block只捕获Block中会用到的变量。由于只捕获了自动变量的值,并没存地址,所以Block内部不能改变自动变量的值。Block捕获的外部变量可以改变值的是静态变量,静态全局变量,全局变量

拓展:

1.MRC下使用__block解决循环引用的原理

Block在捕获住__block变量之后,并不会复制到堆上,所以地址也一直都在栈上。这与ARC环境下的不一样。

iOS __block修饰变量时的底层原理

2.:ARC 和 MRC 对比:

ARC环境下,一旦Block赋值就会触发copy,__block就会copy到堆上,Block也是__NSMallocBlock。ARC环境下也是存在__NSStackBlock的时候,这种情况下,__block就在栈上。

MRC环境下,只有copy,__block才会被复制到堆上,否则,__block一直都在栈上,block也只是NSStackBlock,这个时候\forwarding指针就只指向自己了。

相关文章

网友评论

    本文标题:iOS __block修饰变量时的底层原理

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