__block修饰基本数据类型

本文探讨了为何block不能直接修改auto变量的原因,因变量存储在栈上,函数作用域结束时会被销毁。文章提出了两种解决方法:使用static修饰或采用__block修饰。重点解析了__block如何实现对局部变量的修改,通过转换为C++代码展示__Block_byref_age_0对象结构,说明其内部的__forwarding指针如何实现变量修改。
摘要由CSDN通过智能技术生成

####block内部为什么不能够直接修改 auto 变量的值?

image.png

因为 auto age 变量是在栈上存放的, 当函数作用域结束时就会被销毁,而 block 执行的函数是在另一个函数方法里, 这个函数是无法访问到 auto age 变量的 ,虽然 block内部也会生成一个一模一样的变量 age 但是这个 age变量 是 block 内部的 不会影响到外部的 auto 变量 age . 因此 block 内部是无法去修改

####怎么样才能在 block 内部去修改局部变量的值呢 ?

有两种方法可以修改到 变量 age 的值 ,第一种 用static 修饰 age 变量 ,由于是静态变量 它会存放在一个 .data区 这块的内存是随着应用的生命周期而结束,这样就造成了 age 这个变量 无法被释放掉
第二种方法 就是用 __block 去修饰 age 变量,即不改变 age 是 auto 类型的变量 又可以在 block 内部去修改 age 的值 .

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dzb1060545231

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值