OC底层 - block内修改变量

block的捕获问题

block内部修改变量问题

 

讲一下以上两个问题:

对于捕获问题, 只有局部变量才能被捕获, 全局变量不需要捕获,直接拿着使用, 但是有一点, 当block在栈中时, block是不能捕获对象型变量, 直接拿着使用, 只有在堆中的block才能捕获对象型变量;

对于block内部修改问题, 因为变量捕获有两种, 一种是值捕获, 一种是地址捕获, 对于这两种捕获, 第一种是不允许在block中修改其值, 第二种是不允许在block中修改其地址, 但是可以修改其值;对于对象型变量, 也是属于地址捕获, 不允许修改其地址, 但是可以修改对象的属性等; 如果想要修改block内部捕获的变量的值, 则需要使用__block修饰block内部使用的对应的外部变量, 使用__block修饰的变量, 编译器会将auto变量包装成一个对象; 这时候, block内部捕获的变量指向包装的对象地址,, 包装对象内部的变量直接为外部变量对应的类型, 如果是对象类型, 则该变量指向外部对象的地址, 如果是基础类型, 则直接为对应的类型;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值