block(3) - 变量与__block修饰符

本文探讨了__block修饰的本地变量在MRC和ARC环境下与Block的关系及变化。分析了为何在Block中能修改__block变量,以及Block内外变量地址的变化情况。总结了在不同内存管理环境下,Block捕获变量的复制行为。
摘要由CSDN通过智能技术生成

__block修饰变量的时候时候

1、__block修饰本地变量转为cpp的样子
    //用__block修饰的本地变量b多了这个结构体
    struct __Block_byref_b_0 {      //直译为本地变量b在block中是通过引用的
      void *__isa;             
    __Block_byref_b_0 *__forwarding;     
     int __flags;
     int __size;
     int b;
    };
    //此函数的作用是将栈上的b copy 到堆中
    static void __main_block_copy_0(struct __main_block_impl_0*dst, struct __main_block_impl_0*src) 
    {
        _Block_object_assign((void*)&dst->b, (void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/);
    }

    //此函数的作用是将栈上的b 释放
    static void __main_block_dispose_0(struct __main_block_impl_0*src) 
    {
        _Block_object_dispose((void*)src->b, 8/*BLOCK_FIELD_IS_BYREF*/);
    }
static struct __main_block_desc_0 {    //描述block的信息
  size_t reserved;
  size_t Block_size;
  void (*copy)(struct __main_block_impl_0*, struct __main_block_impl_0*);    //函数指针
  void (*dispose)(struct __main_block_impl_0*);      //函数指针
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值